Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다.
파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다.
Git은 프로젝트의 히스토리를 조회할 때 서버 없이 조회한다. 즉 오프라인 상태이거나 VPN에 연결하지 못해도 막힘없이 일할 수 있다.
Committed, Modified, Staged
Windows: $ cd /c/user/my_project
그리고 아래와 같은 명령을 실행한다.
git init
이 명령은 .git 이라는 하위 디렉토리를 만든다. 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.
Git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다.
git add
명령으로 파일을 추가하고 git commit
명령으로 커밋한다.
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
다른 프로젝트에 참여하려거나 Git 저장소를 복사하고 싶을 때 git clone
명령을 사용한다.
git clone
을 사용하면 프로젝트 히스토리를 전부 받아온다.
git clone https://github.com/libgit2/libgit2
이 명령은 'libgit2'라는 디렉토리를 만들고 그 안에 .git
디렉토리를 만든다. 그리고 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 Checkout 해놓는다.
파일의 상태를 확인하려면 보통 git status
명령을 사용한다.
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
위의 내용은 파일을 하나도 수정하지 않았다는 것을 말해준다.
어떤 파일은 Git이 관리할 필요가 없다. 그런 파일을 무시하려면 .gitignore
파일을 만들고 그 안에 무시할 파일 패턴을 적는다.
단순히 파일이 변경됐다는 사실이 아니라 어떤 내용이 변경됐는지 살펴보려면 git status
명령이 아니라 git diff
명령을 사용해야 한다.
git commit
Git에서 파일을 제거하려면 git rm
명령으로 파일을 삭제한 후에 커밋해야 한다.
리모트 저장소는 인터넷이나 네트워크 어딘가에 있는 저장소를 말한다. 저장소는 여러 개가 있을 수 있는데 어떤 저장소는 읽고 쓰기 모두 할 수 있고 어떠 저장소는 읽기만 가능할 수 있다.
간단히 말해서 다른 사람들과 함께 일한다는 것은 리모트 저장소를 관리하면서 데이터를 거기에 Push 하고 Pull 하는 것이다. 리모트 저장소를 관리한다는 것은 저장소를 추가 삭제하는 것뿐만 아니라 브랜치를 관리하는 방법에 대해 설명한다.
git remote
명령으로 현재 프로젝트에 등록된 리모트 저장소를 확인할 수 있다. 저장소를 clone
하면 origin
이라는 이름을 볼 수 있다.
$git remote -v
git remote add <단축이름> <url>
명령을 사용한다.
리모트 저장소에서 데이터를 가져오려면 아래와 같이 실행한다.
$ git fetch <remote>
이 명령은 로컬에는 없지만, 리모트 저장소에는 있는 데이터를 모두 가져온다.
그냥 쉽게 git pull
명령으로 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 Merge 시킬 수 있다. Clone 한 서버에서 데이터를 가져오고 그 데이터를 자동으로 현재 작업하는 코드와 Merge 시킨다.
프로젝트를 공유하고 싶을 때 Push 할 수 있다.
이 명령은 git push <리모트 저장소> <브랜치 이름>
으로 단순하다.
모든 버전 관리 시스템은 브랜치를 지원한다. 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는데, 이렇게 독립적으로 개발하는 것이 브랜치다.
git branch
명령으로 test 브랜치 만들어보자.
git branch test
git checkout
명령으로 다른 브랜치로 이동할 수 있다. 한번 testing 브랜치로 바꿔보자.
$ git checkout testing
Git에서 한 브랜치에서 다른 브랜치로 합치는 방법으로는 두 가지가 있다.
하나는 Merge 이고 다른 하나는 Rebase 이다.
두 개의 브랜치를 합치는 가장 쉬운 방법은 merge
명령을 사용하는 것이다.