嵌套的git仓库?
我可以嵌套git存储库吗? 我有:
/project_root/ /project_root/my_project /project_root/third_party_git_repository_used_by_my_project
git init /添加/ project_root是否有意义,以便本地pipe理一切,或者我必须分别pipe理my_project和第三方吗?
您可能正在寻找称为子模块的Gitfunction。 此function可帮助您pipe理嵌套在主存储库内的相关存储库。
将第三方库放在单独的存储库中,并使用子模块将它们与主项目相关联。 这是一个步骤:
http://git-scm.com/book/en/Git-Tools-Submodules
在决定如何分割回购协议时,我通常会根据多长时间来修改它们来决定。 如果它是一个第三方库,只是你正在做的改变是升级到一个更新的版本,那么你一定要把它从主项目中分离出来。
只是为了完整:
还有另一个解决scheme,我会build议: 子树合并 。
与子模块相比,它更容易维护。 您将以正常方式创build每个存储库。 在你的主版本库中,你想合并主目录下的其他版本库的master(或其他分支)。
$ 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文档中find 。
git-subtree将帮助你在一棵树中处理多个项目并为它们保留可分离的历史。
你可以添加
/project_root/third_party_git_repository_used_by_my_project
至
/project_root/.gitignore
这应该防止嵌套回购被包括在父回购,你可以独立工作。
但是:如果用户在父仓库中运行git clean -dfx,它将删除被忽略的嵌套仓库。 另一种方法是符号链接文件夹,忽略符号链接。 如果你运行git clean,符号链接被删除,但嵌套的repo将保持不变,因为它确实在其他地方。
我会为每个项目使用一个存储库。 这样,历史变得更容易浏览。
我也会检查我正在使用的第三方库的版本,使用它的项目的存储库。