※ 이 포스트는 생활코딩 운영자 이고잉 님의 'Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문' 책을 읽으면서 중요한 내용을 정리해 둔 것입니다.
지난 포스트에서 언급했듯이, 깃이 제공하는 핵심 기능은 크게 "버전 관리, 백업, 협업"으로 나눌 수 있다. 지난 포스트에서는 버전 관리와 백업의 핵심 명령어들을 다뤄 보았다면, 이번에는 '협업'과 관련된 기능들을 정리해 보겠다.
git clone '복사한 주소 붙여넣기' '디렉터리명'
- 깃헙 레포의 주소를 복사해 온다.
- 디렉터리가 존재하지 않으면 자동으로 디렉터리가 만들어지고 cloning이 일어난다.
- 원격 저장소를 현재 디렉터리에 복제하려면 디렉터리명에 마침표(.)를 입력하면 된다.
git pull
- 다른 협업자가 원격 저장소에 새로 올린 커밋을 가져온다.
- 앞에서 복제 과정을 거쳤으면 master 브랜치는 origin에 이미 연결되어 있다.
지역 저장소의 master 브랜치처럼 원격 저장소도 만들 때 기본적으로 master 브랜치가 생성된다.
git log
에서 HEAD -> master
: 이 커밋이 지역 저장소의 최종 커밋이라는 뜻.
git log
에서 origin/master
: 원격 저장소의 최종 커밋이라는 뜻이다.
git fetch - 원격 저장소의 정보를 가져온다.
- git pull은 원격 저장소의 커밋을 가져와서 무조건 지역 저장소와 합치지만, fetch는 변화 정보만 가져온다.
git checkout FETCH_HEAD
- fetch해서 가져온 최신 커밋을 살펴보고 싶다면
- fetch 명령은 origin/master가 아닌 FETCH_HEAD라는 branch로 정보를 가져온다.
git merge FETCH_HEAD
- master branch에서 수행
- 이 명령으로 master branch와 FETCH_HEAD에 있던 커밋을 병합한다.
- 이것 대신 git pull 명령으로 원격 저장소의 소스를 내려받아도 된다.
git merge origin/master
- fetch한 뒤, 원격 master 브랜치에 있는 커밋을 병합하는 경우
git merge origin/브랜치 이름
- 다른 브랜치에 있는 커밋을 병합하는 경우
원격 저장소에 공동 작업자를 추가한다.
각 작업자의 컴퓨터에 지역 저장소를 만든다. 저장소마다 다른 이름이나 메일 주소를 사용하기 위해 git config
명령을 사용할 때, --global
옵션을 빼고 이름과 메일 주소를 지정한다.
원격 저장소에 처음 올라가는 커밋은 앞에서 공부했던 것과 똑같이 하면 된다.
원격 저장소에서 협업할 때 공동 작업자는 자신의 작업을 진행하기 전에 git clone
명령을 사용해서 원격 저장소를 복제(clone)한다.
Github에서 협업할 때는 여러 사람이 함께 문서를 수정하고 push해야 하기 때문에 반드시 작업하기 전에 원격 저장소의 최신 커밋을 pull한 다음 자신의 커밋을 push해야 한다. (그렇지 않으면 ![rejected]
라는 오류를 만나게 된다.)
팀원들이 각자 다른 기능을 맡아서 작업하는 경우, 각자의 작업이 master 브랜치에 있는 문서들과 섞이지 않도록 새 브랜치를 만들어서 버전을 관리한다.
각 팀원이 만든 새 브랜치 역시 원격 저장소에 그대로 push할 수 있다.
git checkout -b f
- 지역 저장소에 브랜치 f를 만들고 f로 checkout한다.
- -b 옵션을 사용하면 브랜치를 만들고 checkout하는 것을 한꺼번에 할 수 있다.
git push origin f
- 원격 저장소(origin)에 f 브랜치를 push한다.
- push한 브랜치는 Github에서 pull request를 남겨 병합할 수 있다.
협업에 대한 내용은 여기까지. 지난 포스트와 이번 포스트에 있는 명령어들만 잘 알아 두면 깃을 이용해서 Toy Project / Team Project를 큰 무리 없이 진행할 수 있을 것이라 생각한다.