소규모 팀으로 일을 할때 어떤 절차에 의해서 소스를 Merge하고 원격저장소로 Push 할 수 있는지 알아보자. 팀원간 Git 기본 workflow로써 가장 기본적으로 숙지해야할 사항이라 판단된다.
1) 가정
- 3~5명이 하나의 원격 Git - 예, GitHub Private Repository - 에 원본을 합친다
- 각자가 local repositor로 내려 받아서 작업을 한다
2) 갑순이 push 작업
- 갑순이가 GitHub에서 저장소를 복제한다 : git clone <git address>
- 갑순이가 하나의 파일에 대해서 수정하고 commit 한다 : git commit -am "modified files"
- GitHub에 변경된 파일을 push 한다 : git push origin master
3) 갑돌이 push 작업
- 갑돌이도 GitHub에서 저장소를 복제한다
- 값돌이도 다른 파일 하나를 수정하고 commit 한다
- GitHub에 변경된 파일을 push 한다 => 오류가 발생하여 파일 push를 하지 못한다
4) 갑돌이 push 오류 해결하기
- 갑돌이는 Push 하기전 원격저장소의 갑순이 commit 내역을 로컬 저장소에 merge 해야 한다
- 갑돌이는 먼저 원격 저장소의 내용을 fetch 한다 : git fetch origin
[그림 5.4] origin에서 fetch를 하면 origin/master가 된다(fbff5) 로컬의 master (738ee)와 merge는 안된 상태
- 로컬 master와 원격 origin/master를 merge 한다 : git merge origin/master
- 갑돌이는 merge를 완료하고 push를 재시도 한다 : git push origin master (origin master 생략가능)
[그림 5.5] merge를 했을 때 새로운 commit object가 생성된다 (72bbc)
[그림 5.6] push를 하게되면 origin/master의 위치도 최신 commit object를 가르키게 된다 (72bbc)
5) 갑순이 branch 생성후 push 추가작업
- 갑순이는 이슈해결을 위하여 별도 issue54 브랜치를 만들었다
- issue54 브랜치에 대해서 3개의 commit을 수행하였다.
- 원격으로 push 하기 위하여 먼저 원격의 갑돌이 push 내역을 fetch 한다 : git fetch origin
[그림 5.8] fetch하여 원격의 origin/master를 가져온다 (72bbc)
- fetch 해온 origin/master 와 merge할 내용을 확인한다 : git log --no-mergs origin/master ^issue54
- merge를 위하여 master 브랜치로 checkout 한다 : git checkout master
- 먼저 issue54 부터 merge 한다 : git merge issue54
origin/master 와 issue54 브랜치는 모두 master 보다 fast-forward 된 브랜치 이기 때문에 순서에 상관없이 merge해도 된다
- 다음 origin/master 를 merge 한다 : git merge origin/master
[그림 5.9] local의 issue54를 merge하고, origin/master와 merge를 하면 새로운 commit object가 생성된다 (8059c)
- 로컬 저장소에 모드 merge 되었으므로 원격 저장소로 push 한다 : git push origin master
[그림 5.10] push를 하게되면 origin/master가 가르키는 commit object는 최신 8059c 가 된다.
6) 최종 Workflow 모습
- 갑순이 == Jessica
- 갑돌이 == John
[그림 5.11] push -> fetch -> merge -> push 작업이 이루어진다
<참조>
- Pro Git : 5장 page 104
'Git, GitHub > Git Lec02' 카테고리의 다른 글
[Pro Git] 공개 소규모 팀 운영 (0) | 2013.01.30 |
---|---|
[Pro Git] 비공개 대규모 팀 운영 (0) | 2013.01.28 |
[Pro Git] 커밋 가이드라인 (0) | 2013.01.25 |
[Pro Git] 협업 Workflow (0) | 2013.01.25 |
[Pro Git] 브랜치를 merge하기 위한 Rebase 하기 (0) | 2013.01.16 |