자식 하위 모듈과 하위 트리를 사용하는 것의 개념적 차이점은 무엇입니까?
각각에 대한 일반적인 시나리오는 무엇입니까?
자식 하위 모듈과 하위 트리를 사용하는 것의 개념적 차이점은 무엇입니까?
각각에 대한 일반적인 시나리오는 무엇입니까?
답변:
링크가 항상 외부 저장소의 헤드를 가리 키도록하려면 어떻게합니까?
다음을 사용하여 서브 모듈이 원격 모듈 리포지토리의 HEAD를 따르도록 서브 모듈을 만들 수 있습니다.
o git submodule add -b <branch> <repository> [<path>]
. (따라서 분기를 지정하기 위해)
o git submodule update --remote
서브 모듈의 내용을 <repository>/<branch>
기본적으로 에서 최신 HEAD로 업데이트합니다 origin/master
. 주 프로젝트는 여전히 --remote
사용하더라도 서브 모듈의 HEAD 해시를 추적합니다 .
add -b
하고 --remote
당으로, 이후 업데이트 명령에 서브 모듈 업데이트 문서 . 이 경우 -b
마스터의 HEAD를 따르는 데 실제로 필요한가?
-b
서브 모듈에 대한 올바른 .gitmodule 메타 데이터를 생성하는 데 사용됩니다 (와 동일 git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
- --remote
경우에도 작동 -b
에 사용하지 않은 add
. 두 경우 모두 업데이트로 인해 하위 모듈을 수용하는 상위 리포지토리에서 커밋이 발생하므로 링크가 실제로 "항상 HEAD를 가리 키지"않습니다. 원래 답변에서 제거하는 것이 좋습니다 (?)
개념적 차이는 다음과 같습니다.
와 자식 서브 모듈 당신은 일반적으로 작은 것들로 큰 저장소를 구분합니다. 서브 모듈을 참조하는 방법은 maven 스타일 입니다. 다른 (서브 모듈) 저장소에서 단일 커밋을 참조하고 있습니다. 서브 모듈 내에서 변경이 필요한 경우 서브 모듈 내에서 커밋 / 푸시를 수행 한 다음 기본 리포지토리에서 새 커밋을 참조한 다음 메인 리포지토리의 변경된 참조를 커밋 / 푸시해야합니다. 그렇게하면 완전한 빌드를 위해 두 저장소 모두에 액세스 할 수 있어야합니다.
자식 하위 트리 를 사용하면 기록을 포함하여 다른 저장소를 통합 할 수 있습니다. 따라서 통합 후에는 저장소의 크기가 더 클 수 있으므로 저장소를 더 작게 유지하는 전략이 아닙니다. 통합 후에는 다른 리포지토리에 연결할 수 없으며 업데이트를 원하지 않으면 액세스 할 필요가 없습니다. 따라서이 전략은 코드 및 기록 재사용에 더 적합합니다. 개인적으로는 사용하지 않습니다.
git subtree
원하는 경우 여전히 푸시 할 수 있습니다.
서브 모듈
원격으로 메인 REPO을 눌러 하위 모듈의 파일을 밀어하지 않습니다
하위 트리
를 메인 리포지토리로 푸시하여 하위 트리의 파일을 원격 푸시
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master