시작으로
먼저, Comparing Workflows의 글에서 자세히 공부할 수 있었다.
협업 뿐만아니라 Git에 대해 자세히 정리되어 있으니 참고하길 바란다.
글에서 정리한 대표적인 Git
워크플로우는 4가지이다.
Centralized Workflow
Feature Branch Workflow
Gitflow Workflow
Forking Workflow
이제 시작해보자~
Centralized Workflow
중앙 집중식 워크플로우로 SVN
과 똑같이 중앙이 되는 메인 저장소
를 중심으로 모든 변경 사항에 대해 main 분기에 커밋된다.
즉, Subversion을 사용하는 것과 똑같은 방식으로 프로젝트를 개발할 수 있다는 말이다.
하지만, SVN
에 비해 몇가지 장점
이 있다.
첫째, 모든 개발자는 로컬 저장소에서 일할 수 있다.
로컬 저장소는 완전하게 격리된 공간으로 다른 구성원 및 중앙 저장소에 구애받지 않고 일할 수 있다.
둘째, Git의 강력한 분기 및 병합 모델에 대한 엑세스를 제공한다.
쉽게 말해, Git 브랜치와 병합 기능으로 안전하게 코드를 변경하고 다른 브랜치에 병합할 수 있다.
작동원리
-
Centralized Workflow
는 중앙 저장소를 중심으로 시작한다. - 모든 개발자는 중앙 저장소를 복제하여 자기 로컬 저장소에 가져온다.
-
SVN
과 달리 모든 변경 사항의 커밋은 로컬에 저장되며 중앙 저장소와 완전하게 격리되어있다. - 개발자는 언제든 편한 중단점에서 중앙 저장소와 동기화할 수 있다.
- 모든 개발자는
master
브랜치를 사용하고, 모든 변경사항은 이 브랜치에 커밋한다. - 중앙 저장소에 변경 사항을 반영하려면 개발자는 로컬
master
브랜치에서 중앙 저장소로push
한다.
충돌관리
- 항상 중앙 저장소의 커밋이력을 기준으로 한다.
- 개발자의 변경 내용인 로컬 커밋이 중앙 저장소에
push
할 때, 둘의 커밋이력이 다르다면 변경 사항push
를 거부한다. - 따라서, 개발자는 먼저 중앙 저장소의 변경 내용을
fetch
로 가져와서, 그 위에 변경 사항을rebase
해야 한다. 즉,다른 사람들이 이미 변경한 작업에 내 변경 사항을 추가할래
이다. -
rebase
도중에 중앙 저장소의 변경 내용과 로컬 변경 내용이 충돌난다면, Git은rebase
를 일시 중지하고 수동으로 해결하라고 한다. - 수동으로 해결할 때,
git status
와git add
로 충돌내용을 확인하고 수정하여 해결한다.
예시
철수
와 영희
2명의 개발자가 Centralized Workflow
로 어떻게 협업하는지 직접 해보자.