Distributed Git

2024. 7. 2. 21:03오픈소스SW

Three major workflows

● centralized workflow - 하나의 중앙 저장소를 중심으로 모든 변경 사항이 관리되고, 모든 개발자가 이 중앙 저장소를 통해 작업한다.

● Integration - manager workflow - 여러 개발자가 각자 자신의 브랜치에서 작업한 후, 통합 관리자가 중앙 저장소에 변경 사항을 병합한다.

●Dictator and Lieutenants workflow - 프로젝트의 주요 책임자가 있으며, 여러 부관들이 각자 브랜치에서 작업을 수행하고 이를 주요 책임자가 최종적으로 병합한다.

 

Centralized workflow

● One central hub (중앙 허브) : 모든 개발자들이 기여할 수 있는 하나의 공개된 중앙 저장소가 있다.

● Multiple nodes (여러 노드) : 여러 명의 개발자들이 있으며, 이들은 동일한 접근 권한을 가지고 있다. 모든 개발자들은 자신들의 작업을 중앙 저장소와 동기화해야 하며, 중앙 저장소에 변경 사항을 push할 때, fast-forward 변경만 허용된다. 

 

centralized workflow

Integration - manager workflow

● A contributor - 기여자는 중앙 저장소를 자신의 로컬 환경에 클론한 후, 필요한 변경 작업을 수행한다. 기여자는 변경된 내용을 자신의 공개된 복사본 저장소에 push한 후, 자신의 공개된 복사본 저장소에서 중앙 저장소로 변경사항을 병햡해달라는 요쳥을 유지보수자에게 보낸다.

● A maintainer - 유지보수자는 기여자가 보낸 풀 리퀘스트를 검토하고, 이를 메인 저장소에 병합한 후 변경 사항을 메인 저장소에 push한다.

Integration - manager workflow

 

위의 그림에서 developer는 blessed repository를 자신의 로컬 환경에 클론한 후, 변경 작업을 수행하고 integration manager에게 변경사항을 병합해달라는 요청을 보낸다.

Dictator and Lieutenants workflow

● Developers - 각 개발자는 자신의 topic branch에서 작업을 수행한 후 자신의 변경 사항을 최신 마스터 브랜치 위에 리베이스한다.

● Lieutenants - 부관은 각 개발자들이 작업한 topic branch를 자신의 마스터 브랜치에 병합한다.

● Dictator - 독재자는 부관들이 병합한 마스터 브랜치를 자신의 마스터 브랜치에 다시 병합한다.  독재자는 최종적으로 병합된 마스터 브랜치를 참조 저장소에 push 함으로써 다른 개발자들은 이 참조 저장소의 최신 마스터 브랜치를 기준으로 다시 리베이스 할 수 있다.

Dictator and Lieutenants workflow

 

Rebasing

Git에서 브랜치의 변경 사항을 다른 브랜치의 최신 상태로 옮기는 작업

 

rebasing

Rebasing의 장점

● 깨끗한 커밋 히스토리 - 커밋 히스토리가 깔끔하게 정리되며, 브랜치가 마치 한 번에 병합된 것처럼 보인다.

● 이해하기 쉬운 히스토리 - 커밋 히스토리가 직선 형태로 이어져 있어, 프로젝트의 변경 사항을 더 쉽게 이해할 수 있다.

 

Rebasing의 단점

● 히스토리 손실 가능성 - 리베이싱은 기존 커밋을 새로운 베이스 위에 다시 작성하기 때문에, 원래 커밋의 해시가 변경된다. 이로 인해 커밋 히스토리가 변경되어 추적이 어려워질 수 있다.

master , server , client를 리베이싱할 때 위의 그림에선 client를 먼저 master에 리베이싱하고 그 다음 server를 리베이싱한다. 만약 client가 먼저가 아닌 server를 먼저 master에 리베이싱하면 어떤 상황이 일어날까?

먼저 C3가 삭제되고 C3'가 되므로 client는 길을 잃게된다.  서로 다른 시점에서의 같은 변경 사항을 적용한 결과이기 때문에 C3와 C3'는 동일한 브랜치가 아니다. 즉 C는 원래 브랜치에서의 커밋이고, C'는 리베이스를 통해 재적용된 새로운 커밋이다.

그렇기 때문에 리베이싱을 할 때 순서에 주의하며 리베이싱을 해야한다.

 

 

'오픈소스SW' 카테고리의 다른 글

리눅스 shell script (구구단)  (0) 2024.09.28
Git-Remote(2)  (0) 2024.07.01
Git-Remote(1)  (0) 2024.07.01
Git-Branching(3)  (1) 2024.06.30
Git-Branching(2)  (0) 2024.06.30