실제로 두 개의 별개이지만 관련 주제가 여기 에 있기 때문에 문맥에서 '하위 트리' 라는 용어를 사용할 때 말하는 내용을 명시 적으로주의해야합니다 git
.
git-subtree 및 git 하위 트리 병합 전략 .
TL; DR
두 하위 트리 관련 개념을 사용하면 여러 저장소를 하나에서 효과적으로 관리 할 수 있습니다. 메타 데이터 만 루트 저장소에 .gitmodules 형식으로 저장되는 git-submodule 과 달리 외부 저장소를 별도로 관리해야합니다.
자세한 내용은
git 하위 트리 병합 전략 은 기본적으로 참조한 명령을 사용하는보다 수동적 인 방법입니다.
git-subtree 는보다 자연스러운 구문을 지원하는 래퍼 쉘 스크립트입니다. 이것은 실제로 여전히 일부이며 contrib
일반적인 man 페이지와 함께 git에 완전히 통합되지는 않았습니다. 문서는 대신 스크립트 측면을 따라 저장됩니다.
사용 정보는 다음과 같습니다.
NAME
----
git-subtree - Merge subtrees together and split repository into subtrees
SYNOPSIS
--------
[verse]
'git subtree' add -P <prefix> <commit>
'git subtree' add -P <prefix> <repository> <ref>
'git subtree' pull -P <prefix> <repository> <ref>
'git subtree' push -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]
나는 내 자신의 블로그 게시물을 작성할 계획을 세우고 있었기 때문에 하위 트리 주제에 대해 꽤 많은 리소스를 발견했습니다. 내가 할 경우이 게시물을 업데이트 할 것이지만 지금은 당면한 질문과 관련된 몇 가지 정보가 있습니다.
많은 당신이 찾을 수 있습니다 추구하는 어떤 이 골드 피처 블로그 에 의해 니콜라 Paolucci 관련 섹션 아래 :
서브 모듈 대신 서브 트리를 사용하는 이유는 무엇입니까?
subtree
사용하는 것이 더 좋은 이유는 다음과 같습니다.
- 간단한 워크 플로우 관리가 쉽습니다.
- 의 이전 버전
git
이 지원됩니다 ( 이전 버전 포함 v1.5.2
).
- 하위 프로젝트의 코드는
clone
슈퍼 프로젝트가 완료된 직후에 사용할 수 있습니다 .
subtree
저장소 사용자가 새로운 것을 배울 필요가 없으며 subtree
종속성을 관리하는 데 사용하고 있다는 사실을 무시할 수 있습니다 .
subtree
does submodules
(예 :)
와 같은 새 메타 데이터 파일을 추가하지 않습니다 .gitmodule
.
- 모듈의 내용은 다른 곳에 종속성의 별도 리포지토리 복사본이 없어도 수정할 수 있습니다.
제 생각에는 단점이 허용됩니다.
- 새로운 병합 전략 (예 :)에 대해 배워야합니다
subtree
.
upstream
하위 프로젝트에 대한 코드 기여 는 약간 더 복잡합니다.
- 커밋에서 슈퍼 및 하위 프로젝트 코드를 혼합하지 않는 책임은 사용자에게 있습니다.
나는 이것의 많은 부분에도 동의 할 것이다. 일반적인 사용법에 대해 설명하는 기사를 확인하는 것이 좋습니다.
그가 여기 에이 접근 방식에서 생략 된 중요한 세부 사항을 언급하는 후속 작업을 작성했음을 알 수 있습니다 .
git-subtree
현재 리모컨을 포함하지 않습니다!
이 짧은 시력은 아마도 사람들이 종종 하위 트리를 다룰 때 수동으로 원격을 추가한다는 사실 때문일 수 있지만 이것은 git에도 저장되지 않습니다. 작성자는 git-subtree
이미 생성 된 커밋에이 메타 데이터를 추가하기 위해 작성한 패치를 자세히 설명합니다 . 이것이 공식 git 메인 라인이 될 때까지 커밋 메시지를 수정하거나 다른 커밋에 저장하여 비슷한 일을 할 수 있습니다.
또한 이 블로그 게시물도 매우 유익합니다. 저자는 그가 호출하는 세 번째 하위 트리 메서드를 git-stree
믹스에 추가합니다. 이 기사는 그가 세 가지 접근 방식을 비교하는 데 꽤 좋은 일을했기 때문에 읽을 가치가 있습니다. 그는 자신이하는 일과 싫어하는 일에 대한 개인적인 의견을 제시하고 왜 세 번째 접근 방식을 만들 었는지 설명합니다.
기타
마무리 생각
이 항목에서는 git
기능이 표시를 놓쳤을 때 발생할 수있는 세분화 의 힘 과 세분화를 모두 보여줍니다 .
나는 git-submodule
기여자들이 이해하기 더 헷갈 리기 때문에 개인적으로 혐오감을 쌓았다 . 또한 여러 저장소를 관리하지 않고도 쉽게 재현 가능한 환경을 용이하게하기 위해 프로젝트 내에서 모든 종속성을 관리 하는 것을 선호 합니다. git-submodule
그러나 현재는 훨씬 더 잘 알려져 있으므로이를인지하고 결정을 좌우할 수있는 청중에 따라 당연히 좋습니다.