32

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

4

3 回答 3

25

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

Git 邮件列表上的这个线程提供了一些背景信息。

Panther Software 的这篇文章提供了其他人试图实现类似目标(即svn:externals使用 Git 进行复制)的一些见解。

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

于 2009-07-13T19:00:25.293 回答
22

我遇到了同样的问题。从 git 级别看来,它似乎无法解决,至少无法让您轻松地拉取或推送到父仓库。

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

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

参考:

于 2012-08-17T19:50:00.093 回答
3

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

您可以使用git subtree之类的工具提取此类子项目的历史记录。然后,您可以使用 git submodule 或 git subtree 将子树链接回您的项目,无论您喜欢哪个。

于 2009-08-20T18:19:13.740 回答