순환
ADD file 해줘야 한다 -> Git이 관리하기 시작하도록. 버전을 매기는 대상으로 인식.
Staged 상태가 된다 -> commit할 상태가 되는 것.
Git에서 commit은 코드 변경 사항을 저장소에 영구적으로 기록하는 행위.
Commit을 하는 순간 committed 상태가 됨(버전이 매겨져 있는 상태)
버전을 매긴 후에도 작업을 해야 함 -> modified(unstaged) 상태.
수정하여(edit) 수정된 상태이기 때문에 committed도 아니고 staged 상태도 아님.
버전을 매길 수 있는 staged 상태로 다시 만들어줘야 한다.
그 후에 commit 하여 committed 상태로 만드는 반복 형태.
관리하지 않으려면 committed 상태에서 git에서 DELETE하여 untrcked 상태로 돌려보냄.
Git status
- working directory와 staging area의 상태를 표시(commit 시킬 것이 있는지, modify 중인 것이 있는지 등 확인 가능)
- 파일의 상태를 확인할 때 사용
- 수시로 확인해야 한다! 동작을 한 번 할 때 마다 확인하는 것을 권장
- **상태의 변화에 집중해보기

Git ADD
- git add<파일명>
- working directory에서 생성된 파일을 staging area(index)에 추가
- untracked 상태를 tracked 상태로 옮길 때
- Modified 상태 파일을 다시 staged 상태로 변경
- 즉, commit할 상태로 옮기는 것!
- git add *로 모든 것을 add할 수도 있으나 매우 매우 매우 조심해야 한다
실습

changes to be committed 확인할 수 있다.
Git commit
- git commit-m<"커밋 메시지"> 매우 중요
- git commit -a-m<"커밋 메시지"> add와 동시에 커밋할 수 있다
- 커밋 메시지 엄청 중요! 커밋을 하는 순간 버전이 매겨짐.(커밋 메시지로 버전을 확인할 수 있기 때문에 협업 시 상당히 중요! 되도록 영문으로)
- working directory에서 생성된 파일을 staging area(index)에 추가
- modified 상태의 파일을 staged 상태로 변경
- **a 옵션으로 staged 상태를 생략 가능(Modified 상태에서 바로 committed 상태로 변경)
실습

파일 수정
- cat > test.txt
- 꺽쇠 없이 cat test.txt는 보통은 파일에 있는 내용을 출력하는 데 사용
- 꺽쇠가 들어가면 아래 타이핑한 내용으로 파일을 덮어써라! 의미
- 꺽쇠 두 개면 덮어쓰기가 아닌 아랫줄에 추가
- cat > test.txt 쓰고 엔터 -> 쓰고 싶은 텍스트를 입력하고 컨트롤 + D로 저장
- Committed 상태에서 수정하면 Modified가 됨(unstaged 상태)
- git status를 보면 staged 안된 상태가 있다고 나옴
- commit할 거면 add해줘야 한다.

Git ignore
-
Git에서 무시해야 하는 파일 패턴을 관리
-
확장자가 .a인 파일 무시 -> *.a
-
윗 라인에서 확장자가 .a 인 파일은 무시하게 했지만 lib.a는 무시하지 않음 -> !lib.a
-
현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시 X -> /TODO 경로
-
build/ 디렉토리에 있는 모든 파일은 무시 -> build/
-
doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음(다른 경로에 있는 파일은 무시하지 않도록) -> doc/*.txt (경로를 픽스해서 지정)
-
doc 디렉토리 아래 모든 .pdf 파일 무시(doc디렉토리 하위 폴더 포함 모든 확장자 무시) -> doc/*/.pdf
-
Git에서는 파일을 올리지 않음
실습

statged 된 친구들 commited로 바꾸고, 남아있는 unstaged를 'staged로 바꾸고' commit.
위에서는 'staged로 바꾸고'를 -a -m 으로 생략
테스트 결과

Git RM
- git rm<파일명>
- Git이 add한 순간부터 관리 대상자로 인식하고 있기 때문에 git에서 지워줘야 함
- git에서 관리하는 파일 삭제(untracked 상태로)
- staging area의 파일을 삭제하고 commit
- working directory에서도 삭제됨

- 만약 파일을 먼저 지우면 (rm 파일), git rm 으로 한 번 더 지우면 된다

Git MV(git move)
- git mv<원래 이름><새이름>
- git에서 파일 이름 변경 시 사용
- 파일 이름에는 경로가 포함되어 있어 이름 자체를 변경해야 한다.
실습
-
test2.txt를 test.txt 로 변경(git mv test2.txt test.txt)

-
경로만 바꾸기(text.txt를 HelloGit 폴더에 하위폴더인 src로)
-
똑같은 이름이어도 경로가 다르면 새로운 파일로 인식(기존 있던 파일은 삭제되고, 새로운 폴더로 이동한 파일은 등록되지 않은 새로운 파일 취급) -> rm으로 실제로 git에서도 지우면 됨.


Git MV와 같은 동작
- cp<본래 이름><새 이름>
- git rm<본래 이름>
- git add<새 이름>
- 파일을 복사하고, 원본 파일 삭제 후 git add