Git / / 2021. 4. 13. 11:09

[Git] Submodule / Subtree

반응형

 

 

Submodule을 알아보던 중 Subtree가 자주보여 장단점과 차이점에 대해 찾아보았다.

 

 

저장소 안에 또 다른 깃 저장소가 필요한 경우

  1. submodule
  2. subtree
[Submodule / Subtree]는 실제로는 개별 프로젝트인 여러 개의 프로젝트를 개발자의 로컬에서는 하나의 repo로 관리할 수 있게 해준다.

 

 

Submodule : Git 저장소안에 다른 저장소가 들어가 있는 개념
상위 저장소에서 서브모듈을 SHA값, 하나의 바이너리처럼 취급하기 때문에 병합에 있어 조금은 복잡하다.
(본인은 포인터와 같은 개념으로 이해했다.)
(병합 되는 것이 아닌 최신 커밋의 내용으로 교체된다. 직접 서브모듈을 업데이트한 뒤 병합후 푸쉬해야 한다.)

 

Pointing to a submodule

출처: https://openclassrooms.com/en/courses/5671626-manage-your-code-project-with-git-github/6152286-use-subtrees-and-submodules-to-add-a-public-repo-to-your-project

 

 

Subtree : 여러 저장소를 통합하는 개념
서브모듈과는 달리 상위 저장소에 파일을 직접 추가하고 트래킹한다.
(서브트리의 파일 및 변경사항도 상위 저장소에 기록된다.)
서브트의 원격에 있는 소스와 서브트리를 추가한 저장소가 달라도 "subtree merge"을 활용 양쪽의 변경사항을 모두 반영할 수 있다.

 

장점

  • 간단하고 효율적이며 사용하기 쉽다.
  • 커밋으로 저장되기 때문에 리포지토리에서 사용하기 쉽다.
  • 일반적인 저장소와 동일한 기능을 모두 제공한다. 
  • 변경하는 경우 이점
    1. 저장소를 통해 하위 트리가 통합 된 위치에 쉽게 액세스 할 수 있다. 
    2. 더 깨끗한 코드를 원한다면 모든 커밋을 스쿼시 할 수 있다.
    3. Git으로 쉽게 되돌릴 수 있다.

Integrating a subtree

출처: https://openclassrooms.com/en/courses/5671626-manage-your-code-project-with-git-github/6152286-use-subtrees-and-submodules-to-add-a-public-repo-to-your-project

 

 

Subtree, Submodule의 차이점

  • Submoule
    • Submodule은 CBD(component-based development)에 적합한 모델이며, 메인 프로젝트는 다른 컴포넌트들에 의존적이다.
    • Submodule은 링크이다.
    • Submoudle은 저장소를 여러개의 작은 저장소로 나눌때 사용한다. 만약 서브 모듈에서 변경을 한다면 서브 모듈 안에서 커밋/푸쉬를 한 후에 메인 저장소(슈퍼 프로젝트)에서 한번 더 커밋/푸쉬를 해야 한다.
  • Subtree
    • Subtree는 SBD(system-based development)에 더욱 가까우며, 모든 저장소는 모든것을 포함하고 있으며 각 부분을 수정 가능하다.
    • Subtree는 복사다.
    • Subtree를 사용하면 다른 저장소를 하나의 저장소로 이력과 함께 통합할수 있다. 통합을 하게 된다면 저장소의 크기는 커지지만 코드와 이력을 재 사용하기에는 더욱 좋다. 결국 히스토리를 관리하기에 좋다.

 

 

Subtree가 더 좋은가?

많은 글들이 Subtree를 선호하는 것으로 보인다. 하지만 단점을 알고 사용하자.
상위 저장소에서 서브트리를 직접 수정하고 원격에 푸쉬 할 수 있는것이 Subtree가 더 좋아보이지만서브트리를 추가한 모든 사용자가 서브트리의 내용을 자유롭게 변경해서 원격에 푸쉬할 수 있다는 단점이 존재한다.
소규모 팀이라면 대응이 쉽겠지만, 규모가 커질 수록 문제가 발생할 가능성이 더 커질 수 있다.

 

 

요약

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

 

 

예제의 경우 아래의 사이트들에서 볼 수 있다.

참고

반응형

'Git' 카테고리의 다른 글

[GIT] 자동 로그인(VS Code)  (0) 2023.07.10
[Git] stash  (0) 2021.02.03
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유