我可以嵌套Git仓库吗?我有:
/project_root/ /project_root/my_project /project_root/third_party_git_repository_used_by_my_project
使用git init/add/project_root来简化本地管理是否有意义,或者我必须单独管理my_project和第三方?
git init/add
/project_root
my_project
oknwwptz1#
您可能正在寻找名为submodules的Git功能。此功能可帮助您管理嵌套在主存储库中的依赖存储库。
3mpgtkmj2#
将您的第三方库放在一个单独的存储库中,并使用子模块将它们与主项目相关联。下面是一个演练:Git Tools - Submodules(Pro Git book,2nd.)在决定如何分割一个repo时,我通常会根据我修改它们的频率来决定。如果它是一个第三方库,并且你对它所做的更改只是升级到一个新版本,那么你绝对应该将它从主项目中分离出来。
ee7vknir3#
为了完整起见:还有一个解决方案,我建议:subtree merging .与子模块相比,它更容易维护。你可以用正常的方式创建每个仓库。在主仓库中,你想合并另一个仓库的主仓库(或任何其他分支)到主目录的一个目录中。
$ git remote add -f ThirdPartyGitRepo /project_root/ $ git merge -s ours --no-commit ThirdPartyGitRepo/master $ git read-tree --prefix=third_party_git_repository_used_by_my_project/ -u ThirdPartyGitRepo/master $ git commit -m "Merge ThirdPartyGitRepo project as our subdirectory"`
然后,为了将另一个仓库拉到你的目录中(以更新它),使用子树合并策略:
$ git pull -s subtree ThirdPartyGitRepo master
我用这个方法已经很多年了,它很有效:-)关于这种方式的更多信息,包括与子模块的比较,可以在这个git howto doc中找到。
niwlg2el4#
你可以加上
/project_root/third_party_git_repository_used_by_my_project
到
/project_root/.gitignore
这应该可以防止嵌套的repo被包含在父repo中,并且您可以独立地使用它们。但是:如果用户在父仓库中运行git clean -dfx,它会删除被忽略的嵌套仓库。另一种方法是符号链接文件夹并忽略符号链接。如果您随后运行git clean,符号链接会被删除,但'嵌套'仓库将保持不变,因为它实际上驻留在其他地方。
tv6aics15#
git-subtree将帮助您在单个树中处理多个项目 * 并 * 为它们保留可分离的历史。
qfe3c7zg6#
总结。我可以嵌套git仓库吗?是的,但是默认情况下,git不会跟踪嵌套仓库的.git文件夹,Git有一些专门用来管理嵌套仓库的特性(请继续阅读)。git init/add/project_root是否有意义,以简化本地管理,或者我必须单独管理my_project和第三方项目?这可能没有意义,因为git有管理嵌套仓库的功能。Git内置的管理嵌套仓库的功能是submodule和subtree。这里是a SO question,它涵盖了使用每一个的优点和缺点。
.git
submodule
subtree
ojsjcaue7#
我会为每个项目使用一个仓库,这样,历史就更容易浏览了。我也会检查我正在使用的第三方库的版本,进入使用它的项目的存储库。
7条答案
按热度按时间oknwwptz1#
您可能正在寻找名为submodules的Git功能。此功能可帮助您管理嵌套在主存储库中的依赖存储库。
3mpgtkmj2#
将您的第三方库放在一个单独的存储库中,并使用子模块将它们与主项目相关联。下面是一个演练:Git Tools - Submodules(Pro Git book,2nd.)
在决定如何分割一个repo时,我通常会根据我修改它们的频率来决定。如果它是一个第三方库,并且你对它所做的更改只是升级到一个新版本,那么你绝对应该将它从主项目中分离出来。
ee7vknir3#
为了完整起见:
还有一个解决方案,我建议:subtree merging .
与子模块相比,它更容易维护。你可以用正常的方式创建每个仓库。在主仓库中,你想合并另一个仓库的主仓库(或任何其他分支)到主目录的一个目录中。
然后,为了将另一个仓库拉到你的目录中(以更新它),使用子树合并策略:
我用这个方法已经很多年了,它很有效:-)
关于这种方式的更多信息,包括与子模块的比较,可以在这个git howto doc中找到。
niwlg2el4#
你可以加上
到
这应该可以防止嵌套的repo被包含在父repo中,并且您可以独立地使用它们。
但是:如果用户在父仓库中运行git clean -dfx,它会删除被忽略的嵌套仓库。另一种方法是符号链接文件夹并忽略符号链接。如果您随后运行git clean,符号链接会被删除,但'嵌套'仓库将保持不变,因为它实际上驻留在其他地方。
tv6aics15#
git-subtree将帮助您在单个树中处理多个项目 * 并 * 为它们保留可分离的历史。
qfe3c7zg6#
总结。
我可以嵌套git仓库吗?
是的,但是默认情况下,git不会跟踪嵌套仓库的
.git
文件夹,Git有一些专门用来管理嵌套仓库的特性(请继续阅读)。git init/add/project_root是否有意义,以简化本地管理,或者我必须单独管理my_project和第三方项目?
这可能没有意义,因为git有管理嵌套仓库的功能。Git内置的管理嵌套仓库的功能是
submodule
和subtree
。这里是a SO question,它涵盖了使用每一个的优点和缺点。
ojsjcaue7#
我会为每个项目使用一个仓库,这样,历史就更容易浏览了。
我也会检查我正在使用的第三方库的版本,进入使用它的项目的存储库。