Search
Duplicate
📒

[Git] 0x. subtree를 활용한 코드 공유

상태
완료
수업
개인공부
주제
Git
4 more properties
참고

Git Submodule

NOTE
Git 저장소안에 다른 저장소가 들어가 있는 개념
사실 먼소리인지 모르겠다..
상위 저장소에서 서브모듈을 SHA값, 하나의 바이너리 처럼 취급해서 병합에 있어 복잡하다.
병합 되는 것이 아닌, 최신 commit의 내용으로 교체된다.
직접 서브모듈을 업데이트 한 뒤 병합한 후 푸쉬해야 한다!

Git Submodule의 단점

NOTE
1.
서브모듈 B를 추가한 저장소 A에서 서브모듈을 직접 수정한 후 커밋을 함
2.
서브모듈 B의 원격에 새로운 내용이 푸시됨
저장소 A에 있는 서브 모듈의 내용과, 원격에 있는 서브모듈이 달라짐
충돌발생 위험
3.
서브모듈의 업데이트를 해야함! (git submodule update)
위와 같은 시나리오에서 서브모듈의 병합은 제대로 이루어 지지 않는다!
상위 저장소에서 서브모듈을 SHA값 하나의 바이너리처럼 취급하기 때문
SHA값이 다르므로, A에서 수정한 내용은 그냥 사라져버린다.

Git Subtree

NOTE
여러 저장소를 통합하는 개념
여러 repository를 하나의 큰 repository에 다 떄려박는다고 생각하면 된다.
Submodule과 달리 상위 저장소에 파일을 직접 추가하고 추적한다.
Subtree의 파일 및 변경사항도 상위 저장소에 기록됨
subtree merge를 통해 양쪽의 변경사항 모두 반영가능!

Submodule vs Subtree

NOTE

Submodule

CBD(component-based development)에 적합한 모델이며, 메인 프로젝트는 다른 컴포넌트들에 의존적이다.
Submodule은 저장소를 여러개의 작은 저장소로 나눌 때 사용한다.
Submodule에서 변경을 하면, SubmoduleMain 양쪽에서 commit/push를 해야한다.

Subtree

SBD(system-based development)에 더욱 가까우며, 모든 저장소는 모든것을 포함하고 수정이 가능하다.
Subtree를 사용하면 다른 저장소를 하나의 저장소로 이력과 함께 통합이 가능하다!

요약

Subtree는 외부 저장소를 복제하므로 기본 저장소에서 사용할 수 있다.
Submodule은 외부 저장소를 복제하고 메인 저장소에서 참조 할 때 링크를 사용한다.
사용자는 Subtree를 사용하여 외부 저장소를 편집 할 수 있다.
외부 저장소가 변경되면 기본 저장소의 Submodule을 직접 업데이트해야한다.
팀 프로젝트Subtree가 좀 더 효율적이나 공용 소스 코드의 수정에 기준을 세워야한다.