programing

Git 하위 모듈과 하위 트리 간의 차이

easyjava 2023. 6. 3. 08:49
반응형

Git 하위 모듈과 하위 트리 간의 차이

git submodule과 subtree의 개념적 차이는 무엇입니까?

각각의 일반적인 시나리오는 무엇입니까?

하위 모듈은 링크입니다.

하위 트리는 복사입니다.

  • 하위 모듈은 주 프로젝트가 다른 구성 요소(레포)의 고정 버전에 의존하는 구성 요소 기반 개발에 더 적합합니다.
    상위 보고서(gitlinks, 인덱스의 특수 항목)에 참조만 보관합니다.

링크가 항상 외부 보고서의 HEAD를 가리키도록 하려면 어떻게 해야 합니까?

다음을 사용하여 하위 모듈 원격 레포의 분기 HEAD를 따르도록 하위 모듈을 만들 수 있습니다.

o. (뒤에 따를 분기를 지정하려면)
o git submodule update --remote합니다.<repository>/<branch>origin/master메인 프로젝트는 하위 모듈의 HEAD 해시를 추적합니다.--remote하지만 사용됩니다.


게다가, 댓글에서 필브가 지적한 것처럼,contrib/와는반과 git submodule 명령명령어)

개념적 차이는 다음과 같습니다.

Git 하위 모듈을 사용하는 경우 일반적으로 큰 저장소를 더 작은 저장소로 분리합니다.하위 모듈을 참조하는 방법은 메이븐 스타일입니다. 다른 (하위 모듈) 리포지토리에서 단일 커밋을 참조하는 것입니다.하위 모듈 내에서 변경이 필요한 경우 하위 모듈 내에서 커밋/푸시를 수행해야 합니다. 그런 다음 기본 저장소의 새 커밋을 참조한 다음 기본 저장소의 변경된 참조를 커밋/푸시합니다.이렇게 하면 전체 빌드를 위해 두 리포지토리에 모두 액세스할 수 있습니다.

git 하위 트리를 사용하면 기록을 포함하여 다른 저장소를 통합할 수 있습니다.따라서 통합 후에는 저장소의 크기가 더 커질 수 있습니다(따라서 저장소를 더 작게 유지하기 위한 전략은 아닙니다).통합 후에는 다른 리포지토리에 대한 연결이 없으며 업데이트를 원하지 않는 한 액세스할 필요가 없습니다.따라서 이 전략은 코드와 기록 재사용에 더 적합합니다. 저는 개인적으로 사용하지 않습니다.

하위 분류의
기본 레포를 원격으로 푸시하면 하위 레포의 파일이 푸시되지 않습니다.

하위 트리
기본 레포를 원격으로 푸시 하위 트리의 파일 푸시

하위 트리와 하위 모듈을 생각하는 가장 간단한 방법은 하위 트리가 상위 리포지토리로 풀링되는 리포지토리의 복사본인 반면 하위 모듈은 다른 리포지토리의 특정 커밋에 대한 포인터라는 것입니다.

[Git 서브모듈 - Atlassian]

Git 하위 모듈은 기본 리포지토리와 별도로 포함된 리포지토리의 커밋 기록을 유지하려는 경우에 유용합니다.그러나 특히 내장된 리포지토리를 업데이트해야 할 때 하위 모듈을 사용하는 것은 복잡하고 관리하기 어려울 수 있습니다.

[Git Subtree 및 서브모듈과의 비교 - Atlassian]

Git 하위 트리는 한 리포지토리를 하위 디렉터리로 다른 리포지토리에 병합할 수 있지만 전체 커밋 기록은 유지할 수 있는 솔루션입니다.별도의 리포지토리를 유지 관리할 필요 없이 서로 다른 프로젝트 간에 파일 집합을 공유하려는 경우 유용합니다.하위 트리를 사용하는 것이 하위 모듈을 사용하는 것보다 간단하고 일반적으로 관리하기 쉽습니다.

즉, 공유 저장소의 커밋 기록을 기본 저장소와 별도로 유지해야 하는 경우 git 하위 모듈이 가장 좋은 선택일 수 있습니다.별도의 리포지토리를 유지 관리할 필요 없이 서로 다른 프로젝트 간에 파일 집합을 공유해야 하는 경우 git 하위 트리를 사용하는 것이 가장 좋습니다.


워크플로 비교 가져오기/업데이트

업데이트를 보내고 받는 명령을 비교해 보겠습니다.

서브모듈

#push updates:
cd path/to/submodule
1. git add .
2. git commit -m "Submodule Update"
3. git push origin master
cd ..
4. git add submodule
5. git commit -m "Submodule ref update"
6. git push origin master
# >Needs to be in this order! Easy to get trouble<

#pull:
git submodule update --remote

하위 트리

#push updates:
cd path/to/shared/repo
1. git add .
2. git commit -m "Subtree update"
3. git push origin master
#then
4. git subtree push --prefix=path/to/shared/repo shared-repo master

#pull:
git subtree pull --prefix=path/to/shared/repo shared-repo master

언급URL : https://stackoverflow.com/questions/31769820/differences-between-git-submodule-and-subtree

반응형