비공개 대규모 팀을 운영할 때는 Git Workflow에서 Integration-Manager 방식을 선택한다. 이는 팀별로 별도의 Master를 두고 Integration Manager가 중앙 Master로 push할 수 있는 권한을 갖도록 한다. 즉, 중간 단계의 master가 하나 더 있는 구조이다.
1) 가정
- 갑순이는 두 팀에 속한다
- 1팀 갑순이 + 갑돌이
- 2팀 갑순이 + 갑복이
2) 1팀 갑순이 featureA만들어 갑돌이와 작업
- 갑순이는 저장소를 clone하고 featureA 브랜치를 만들고 수정후 커밋한다
+ feautreA 브랜치 생성 : git checkout -b featureA
+ 커밋 : git commit -am "add function"
- 갑순이가 해당 브랜치를 갑돌이와 공유하려 한다.
+ 여기서 갑순이는 Integration Manager가 아니다
+ 갑순이는 운격 저장소에 featureA로 push 하고 갑돌이에게 해당 사실을 알린다
3) 2팀 갑순이 featureB 브랜치 만들어 갑복이와 작업
- 갑순이는 갑복이와 원격 저장소의 master 브랜치를 기반으로 featureB작업을 계속 수행하기로 한다
+ 원격저장소에서 로컬 저장소로 fetch 하기 : git fetch origin
+ git checkout -b featureB origin/master
- 갑순이가 몇가지 작업을 하고 featureB에 커밋을 한다
+ git fetch origin
+ git checkout -b featureB origin/master
+ 2번의 커밋객체 생성 : git commit -am "modified some function" (e5b0f) -> git commit -am "add new function" (85127)
[그림 5.12] 갑순이 현재 로컬 저장소 커밋 그래프
- 갑순이 featureB를 push 하려는데 갑복이로부터 이미 featureBee 브랜치로 한번 push 했다고 연락을 받는다
+ 갑복이 내역을 merge 하기위해 fetch 한다 : git fetch origin
+ 갑복이 브랜치를 merge 한다 : git merge origin/featureBee
- 갑순이 이제 featureB를 원겨 저장소로 push 하려는데 갑복이 featureBee 와 이름이 틀리다
+ 로컬 featureB를 원격 featureBee로 push 한다 : git push origin featureB:featureBee (cd685)
4) 1팀 갑돌이 featureA 작업
- 갑돌이 featureA 작업후에 push 했고 갑순이에게 확인요청한다
- 갑순이는 내역확인을 위하여 원격저장소에서 fetch 한다 : git fetch origin
- 갑순이는 featureA 브랜치에 어떤 것이 업데이트 되었는지 확인한다 (갑돌이 커밋시 메시지 잘 입력했다 가정함)
+ 변경내역 확인 : git log origin/featureA ^featureA
+ 확인후 로컬 featureA 브랜치로 이동 : git checkout featureA
+ 원격 featureA를 로컬 featureA에 merge 수행 : git merge origin/featureA
- 갑순이 다시 일부 수정하여 featureA 브랜치를 원격 저장소로 push 한다
+ git commit -am "small tweak"
+ git push origin featureA (774b3)
+ 갑순이의 저장소를 보자
[그림 5.13] featureB도 원격으로 push하고 featureA도 원격 저장소로 push한 갑순이 로컬 저장소
5) 갑순이 메인 브랜치로 merge 요청작업
- Integration-Manager는 두 브랜치를 merge 하고 메인 브랜치의 커밋 (5399e) fetch해 온다
- 다음과 같은 구조가 될 것이다
[그림 5.14] integration manager는 774b3 과 ce685 커밋을 merge하여 5399e를 원격저장소에 커밋한 후 갑순이가 fetch 함!
<참조>
- Pro Git 5장 108p
'Git, GitHub > Git Lec02' 카테고리의 다른 글
[Pro Git] Rebase 대신 Cherry-pick 사용하기 (0) | 2013.02.28 |
---|---|
[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 |