Git子模块到子文件夹

问题描述 投票:25回答:3

在svn中,您可以将存储库链接到另一个svn存储库中的任何文件夹。我想知道git是否有类似功能?基本上,我希望在我的存储库中有一个git子模块,但是我希望该子模块是指向另一个git存储库而不是整个存储库的子文件夹的指针。这可能吗?

git dvcs git-submodules
3个回答
20
投票

Git不支持部分签出,因此submodule必须指向完整的存储库。

[This thread on the Git mail list提供了一些背景信息。

[This article from Panther Software提供了其他人的一些见识,他们试图实现类似的目标(即,使用Git复制svn:externals)。

如果两个项目都在您的控制之下,那么我建议您将您感兴趣的“子文件夹”隔离到其自己的独立存储库中。然后,两个项目都可以创建链接到它的子模块。


18
投票

我遇到了同样的问题。从git级别看,它似乎无法解决,至少在某种程度上,它无法让您轻松拉或推到父仓库。

但是,您可以使用简单的符号链接来解决此限制:

  1. 在单独的目录中设置子模块。
    • git submodule add http://example.com/repo.git ./submodules/repo
  2. 在所需位置创建指向子文件夹的符号链接:
    • ln -s ./submodules/repo/subdirectory ./wherever/symlinked_directory

参考:


3
投票

通常,当您尝试提取其他项目的子文件夹时,该子文件夹首先应该是一个单独的项目,并且both父项目都应引用该子文件夹。

您可以使用git subtree之类的工具来提取此类子项目的历史记录。然后,您可以使用git子模块或git子树(无论您愿意使用哪种方式)将子树链接回您的项目。

© www.soinside.com 2019 - 2024. All rights reserved.