참고
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에서 변경을 하면, Submodule과 Main 양쪽에서 commit/push를 해야한다.
Subtree
•
SBD(system-based development)에 더욱 가까우며, 모든 저장소는 모든것을 포함하고 수정이 가능하다.
•
Subtree를 사용하면 다른 저장소를 하나의 저장소로 이력과 함께 통합이 가능하다!
요약
•
Subtree는 외부 저장소를 복제하므로 기본 저장소에서 사용할 수 있다.
•
Submodule은 외부 저장소를 복제하고 메인 저장소에서 참조 할 때 링크를 사용한다.
•
사용자는 Subtree를 사용하여 외부 저장소를 편집 할 수 있다.
•
외부 저장소가 변경되면 기본 저장소의 Submodule을 직접 업데이트해야한다.
•
팀 프로젝트에 Subtree가 좀 더 효율적이나 공용 소스 코드의 수정에 기준을 세워야한다.