我可以嵌套git存储库吗?我有:
/project_root/
/project_root/my_project
/project_root/third_party_git_repository_used_by_my_project
Run Code Online (Sandbox Code Playgroud)
git init/add/project_root是否有意义在本地轻松管理所有内容,还是我必须单独管理my_project和第三方?
Gre*_*ill 149
您可能正在寻找称为子模块的Git功能.此功能可帮助您管理嵌套在主存储库中的相关存储库.
Igo*_*aka 35
将您的第三方库放在一个单独的存储库中,并使用子模块将它们与主项目相关联.这是一个演练:
http://git-scm.com/book/en/Git-Tools-Submodules
在决定如何分割回购时,我通常会根据修改它们的频率来决定.如果它是第三方库,只有您正在进行的更改是升级到更新的版本,那么您一定要将它与主项目分开.
Phi*_*hil 18
只是为了完整性:
还有另一个解决方案,我建议:子树合并.
与子模块相比,它更容易维护.您将以正常方式创建每个存储库.在主存储库中,您希望将主目录的主目录(或任何其他分支)合并到主目录的目录中.
$ 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"`
Run Code Online (Sandbox Code Playgroud)
然后,为了将其他存储库拉入您的目录(更新它),请使用子树合并策略:
$ git pull -s subtree OtherRepository master
Run Code Online (Sandbox Code Playgroud)
我现在使用这种方法多年了,它有效:-)
关于这种方式的更多信息,包括将它与子模块进行比较,可以在这个git howto doc中找到.
mik*_*eum 16
你可以添加
/project_root/third_party_git_repository_used_by_my_project
Run Code Online (Sandbox Code Playgroud)
至
/project_root/.gitignore
Run Code Online (Sandbox Code Playgroud)
这应该防止嵌套的repo包含在父repo中,你可以独立地使用它们.
但是:如果用户在父仓库中运行git clean -dfx,它将删除忽略的嵌套仓库.另一种方法是对文件夹进行符号链接并忽略符号链接.如果然后运行git clean,则删除符号链接,但'嵌套'repo将保持原样,因为它实际上位于其他位置.
eph*_*ent 14
git-subtree将帮助您在单个树中处理多个项目,并为它们保留可分离的历史记录.