시작으로

먼저, Comparing Workflows의 글에서 자세히 공부할 수 있었다.
협업 뿐만아니라 Git에 대해 자세히 정리되어 있으니 참고하길 바란다.

글에서 정리한 대표적인 Git 워크플로우는 4가지이다.

  • Centralized Workflow
  • Feature Branch Workflow
  • Gitflow Workflow
  • Forking Workflow

이제 시작해보자~


Centralized Workflow


Desktop View

중앙 집중식 워크플로우로 SVN과 똑같이 중앙이 되는 메인 저장소를 중심으로 모든 변경 사항에 대해 main 분기에 커밋된다. 즉, Subversion을 사용하는 것과 똑같은 방식으로 프로젝트를 개발할 수 있다는 말이다.

하지만, SVN에 비해 몇가지 장점이 있다.

첫째, 모든 개발자는 로컬 저장소에서 일할 수 있다.
로컬 저장소는 완전하게 격리된 공간으로 다른 구성원 및 중앙 저장소에 구애받지 않고 일할 수 있다.

둘째, Git의 강력한 분기 및 병합 모델에 대한 엑세스를 제공한다.
쉽게 말해, Git 브랜치와 병합 기능으로 안전하게 코드를 변경하고 다른 브랜치에 병합할 수 있다.


작동원리

  • Centralized Workflow는 중앙 저장소를 중심으로 시작한다.
  • 모든 개발자는 중앙 저장소를 복제하여 자기 로컬 저장소에 가져온다.
  • SVN과 달리 모든 변경 사항의 커밋은 로컬에 저장되며 중앙 저장소와 완전하게 격리되어있다.
  • 개발자는 언제든 편한 중단점에서 중앙 저장소와 동기화할 수 있다.
  • 모든 개발자는 master 브랜치를 사용하고, 모든 변경사항은 이 브랜치에 커밋한다.
  • 중앙 저장소에 변경 사항을 반영하려면 개발자는 로컬 master 브랜치에서 중앙 저장소로 push한다.


충돌관리

  • 항상 중앙 저장소의 커밋이력을 기준으로 한다.
  • 개발자의 변경 내용인 로컬 커밋이 중앙 저장소에 push 할 때, 둘의 커밋이력이 다르다면 변경 사항 push를 거부한다.
  • 따라서, 개발자는 먼저 중앙 저장소의 변경 내용을 fetch로 가져와서, 그 위에 변경 사항을 rebase해야 한다. 즉, 다른 사람들이 이미 변경한 작업에 내 변경 사항을 추가할래 이다.
  • rebase 도중에 중앙 저장소의 변경 내용과 로컬 변경 내용이 충돌난다면, Git은 rebase 를 일시 중지하고 수동으로 해결하라고 한다.
  • 수동으로 해결할 때, git statusgit add로 충돌내용을 확인하고 수정하여 해결한다.


예시

철수영희 2명의 개발자가 Centralized Workflow로 어떻게 협업하는지 직접 해보자.