형상 관리 도구(Configuration Management Tool) 중 하나
버전 관리 시스템 이라고도 한다.
https://git-scm.com/book/ko/v2 공식 사이트 한글 문서
https://git-scm.com/ 설치 필요
관리하고자 하는 디렉토리 위치에서 git init
명령어 실행
git init
명령은 .git이라는 하위 디렉토리 생성
해당 디렉토리는 저장소에 필요한 뼈대 파일(Skeleton)이 들어있다.
Git 저장소를 생성할 뿐 프로젝트 파일을 관리하고 있지는 않다.
다른 프로젝트에 참여하거나 Git 저장소를 복사하고 싶을 때
저장소를 위치시킬 곳에서 git clone <url>
명령어를 통해 저장소를 Clone
Git으로 관리되는 파일은
관리대상(Tracked) 과
관리대상이 아님(Untracked) 으로 나뉜다.
Git이 알고있는 파일
Unmodified 수정되지 않은 상태
Modified 수정된 상태
Staged 커밋으로 저장소에 기록할 상태
Tracked 파일 이외 모든 파일
Git이 알기 위해선 git add <file>
명령이 필요
git status
명령
현재 작업 중인 브랜치와 commit의 필요 여부를 알려준다.
git status -s
또는 git status --short
옵션을 통해 간단한 상태를 확인할 수 있다.
git add <file>
명령
지정된 파일(디렉토리)을 새로 추적하고 관리한다.
디렉토리의 경로를 받아 하위 모든 파일(디렉토리)들을 재귀적으로 추가한다.
파일을 수정 후 git status
명령 실행 시 수정한 파일은 Tracked 상태이지만 Staged 상태가 아니다.
git add
를 통해서 수정한 파일을 Staged 상태로 만들 필요가 있다.
add의 의미를 프로젝트에 파일을 추가하는 의미 보단 다음 커밋에 추가한다고 생각하자
Git이 관리한 필요가 없는 파일의 경우 해당 파일을 무시할 수 있다.
보통 로그 파일이나 빌드 시스템이 자동으로 생성한 파일은 관리할 필요가 없다.
.gitignore 파일을 만들고 무시할 파일의 패턴을 작성한다.
$ cat .gitignore
*.[oa]
*~
확장자가 .o 또는 .a인 파일과 ~로 끝나는 모든 파일은 무시한다.
보통 .gitignore 파일은 처음에 만들어 커밋하고 싶지 않은 파일의 커밋을 방지하는 것이 편리하다.
단순 파일의 변경 여부를 확인하는 것 이상으로 어떤 내용이 변경되었는지 확인할 필요가 있다.
git diff
실행 시 수정했지만 아직 Staged 상태가 아닌 파일을 비교할 수 있다.
해당 명령은 작업중인 디렉토리의 파일과 Staging Area의 상태를 비교한다.
git diff --staged
옵션은 Git 저장소에 커밋한 내용과 Staging Area의 상태를 비교한다.
git diff
는 마지막으로 커밋한 후 수정한 것들을 보여주는 것이 아니라 Unstaged 상태인 것을 보여주기 때문에 수정한 파일을 모두 Staging Area에 넣었다면 아무것도 출력하지 않는다.
git diff
: Ustaged 상태인 변경 부분을 확인
git diff --staged
또는 git diff --cached
: Staged 상태인 파일 확인
수정 사항을 커밋하기 위해서는 Staging Area에 파일 정리할 필요가 있다.
Unstaged 상태의 파일은 커밋되지 않으며 생성하거나 수정한 이후 git add
명령으로 추가하지 않은 파일은 커밋되지 않는다.
커밋 전에 git status
명령을 통해 현재 상태를 확인하자
이후 git commit
을 통해 커밋한다.
명령어 실행후 실행되는 편집기를 통해 커밋 내용을 확인하고 메시지를 작성할 수 있다.
git commit -m
옵션을 통해 커밋 메시지를 인라인으로 첨부할 수 있다.
git commit
실행 시 브랜치와 체크섬을 알려준다. 그리고 수정한 파일의 개수와 삭제 또는 추가된 라인 수를 알려준다.
Git은 Staging Area에 속한 스냅샷을 커밋한다. 따라서 수정했지만 Staging Area에 넣지 않은 것은 다음에 커밋할 수 있다.
커밋할 때마다 프로젝트의 스냅샷을 기록하기 때문에 스냅샷끼리 비교하거나 예전의 스냅샷 상태로 되돌릴 수 있다.
git commit -a
옵션을 통해 실행할 경우 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣어 커밋한다.
git add
명령을 하지 않은 파일을 모두 자동으로 추가하여 커밋한다.
Git에서 파일을 제거하기 위해선 git rm
명령을 통해 파일을 삭제하고 커밋해야한다.
해당 명령은 실제 디렉토리에 있는 파일도 삭제한다.
Git 명령을 사용하지 않고 단순히 디렉토리에서 파일을 삭제할 경우 'Changes not staged for commit' 즉, Unstageed 상태로 표시한다.
git rm
실행 이후 삭제한 파일은 Staged 상태가 되고 커밋하면 Git은 더 이상 해당 파일을 관리하지 않는다.
삭제 이전에 수정하거나 Staging Area에 추가했다면 git rm -f
옵션을 통래 강제로 삭제해야한다.
git rm --cached
옵션은 Staging Area에서만 제거하고 실제 디레고리에 있는 파일은 지우지 않고 남겨둔다.
git mv <기존 파일 명> <변경할 파일 명>
을 통해 파일 이름을 변경할 수 있다.
$ mv <기존 파일 명> <변경할 파일 명>
$ git rm <기존 파일 명>
$ git add <변경된 파일 명>
세 줄의 명령과 동일한 동작을 수행한다.