중첩 된 Git 리포지토리? /project_root/my_project /project_root/third_party_git_repository_used_by_my_project 그것은 이해가됩니까

Git 리포지토리를 중첩 할 수 있습니까? 나는 가지고있다:

 /project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

그것은 이해가됩니까 로컬에서 모든 관리를 쉽게하기 위해 또는 내가 관리해야 할 별도로 제 3 자 하나?git init/add/project_rootmy_project



답변

submodules 라는 Git 기능을 찾고있을 것 입니다. 이 기능은 기본 저장소 내에 중첩 된 종속 저장소를 관리하는 데 도움이됩니다.


답변

써드 파티 라이브러리를 별도의 저장소에 배치하고 서브 모듈을 사용하여 라이브러리를 기본 프로젝트와 연관 ​​시키십시오. 다음은 연습입니다.

http://git-scm.com/book/en/Git-Tools-Submodules

리포지토리를 분할하는 방법을 결정할 때 보통 수정 빈도를 기반으로 결정합니다. 타사 라이브러리이고 변경 사항 만 최신 버전으로 업그레이드하는 경우 기본 프로젝트와 확실히 분리해야합니다.


답변

완전성을 위해 :

또 다른 해결책이 있습니다. 하위 트리 병합 .

하위 모듈과 달리 유지 관리가 더 쉽습니다. 일반적인 방법으로 각 저장소를 작성합니다. 기본 저장소에있는 동안 다른 저장소의 마스터 (또는 다른 브랜치)를 기본 디렉토리의 디렉토리에 병합하려고합니다.

$ git remote add -f OtherRepository /path/to/that/repo
$ git merge -s ours --no-commit OtherRepository/master
$ git read-tree --prefix=AnyDirectoryToPutItIn/ -u OtherRepository/master
$ git commit -m "Merge OtherRepository project as our subdirectory"`

그런 다음 다른 저장소를 디렉토리로 가져 와서 업데이트하려면 서브 트리 병합 전략을 사용하십시오.

$ git pull -s subtree OtherRepository master

나는 수년간이 방법을 사용하고 있는데, 그것은 효과가있다 🙂

하위 모듈과 비교하는 것을 포함 하여이 방법에 대한 자세한 내용은이 git howto doc 에서 찾을 수 있습니다 .


답변

당신은 추가 할 수 있습니다

/project_root/third_party_git_repository_used_by_my_project

/project_root/.gitignore

이렇게하면 중첩 된 리포가 상위 리포지토리에 포함되지 않으며 독립적으로 작업 할 수 있습니다.

그러나 사용자가 부모 리포지토리에서 git clean -dfx를 실행하면 무시 된 중첩 리포지토리가 제거됩니다. 다른 방법은 폴더를 심볼릭 링크하고 심볼릭 링크를 무시하는 것입니다. 그런 다음 git clean을 실행하면 symlink가 제거되지만 ‘nested’저장소는 실제로 다른 곳에 상주하므로 그대로 유지됩니다.


답변

자식-하위 트리가 단일 트리에서 여러 프로젝트를 작업 할 수 있도록 도와줍니다 그리고 그들을 위해 분리의 역사를 유지한다.


답변

요약.

자식 저장소를 중첩 할 수 있습니까?

예. 그러나 기본적으로 git은 .git중첩 저장소 의 폴더를 추적하지 않습니다 . Git에는 중첩 리포지토리 (읽기)를 관리하도록 설계된 기능이 있습니다.

로컬로 모든 것을 쉽게 관리하기 위해 git init / git init를 추가하거나 / project_root를 추가하는 것이 합리적입니까? 아니면 my_project와 타사를 별도로 관리해야합니까?

git에 중첩 리포지토리를 관리하는 기능이 있기 때문에 아마도 의미가 없습니다. 힘내 중첩 된 저장소가 관리하는 기능을 기본적으로 제공 submodule하고 subtree.

여기 에 주제에 대한 블로그가 있으며 여기에 각각의 장단점을 다루는 SO 질문 이 있습니다.


답변

프로젝트 당 하나의 저장소를 사용합니다. 이렇게하면 내역을 쉽게 찾아 볼 수 있습니다.

또한 사용중인 타사 라이브러리의 버전을 사용하여 프로젝트 저장소에 체크인합니다.