【问题标题】:How to change a git submodule to point to a subfolder?如何更改 git 子模块以指向子文件夹?
【发布时间】:2022-02-11 06:05:59
【问题描述】:

浏览the SubModule tutorial,我从boto project 创建了一个子模块。然后,我发现我实际上只需要这个项目的一个子集 - 特别是 boto 文件夹。

我想更改我的子模块以指向此文件夹。当我查看 .gitmodules 时,我看到了

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

我应该使用哪个 URL 来代替 https://github.com/boto/boto.git?修改网址后,是否应该在本地删除boto文件夹重新拉取?

【问题讨论】:

  • 这不是你想要的——不是子模块——但你可以看看git subtree
  • 我最终做的是拥有整个子模块,并告诉 IntelliJ boto 文件夹是一个“源文件夹”,因此它可以在其中找到包。
  • 我不敢相信 git 本身不这样做......哎呀。
  • 发现了一个类似的问题 - stackoverflow.com/questions/1121227/…

标签: git git-submodules


【解决方案1】:

恐怕子模块的 URL 总是只指向存储库 - 您不能指定只需要存储库的子文件夹,就像 git 通常不支持“窄克隆”一样。

如果您无法忍受将整个存储库作为子模块,您总是可以创建一个从 boto 克隆的新存储库,然后设置一个 cron 作业:

  1. git fetch 将该存储库放入目录中
  2. 使用git filter-branch 更新子目录位于顶层的分支。
  3. 将该存储库的分支添加为子模块。但是,这有点繁琐,我的偏好是将整个存储库作为子模块。

【讨论】:

    【解决方案2】:

    您不能只克隆存储库的一部分。这是因为 git 将存储库视为一个完整的对象:当你得到它时,你得到它all

    因此,这里的解决方案是在另一个目录中获取子模块,然后使用符号链接来实现您的目标。

    【讨论】:

    • 我在 Windows 中有符号链接...也很好用。 (那是因为我的机器上有msys,所以我可以像在linux中一样使用ln -s
    • Vista 和 & 带有 MKLink。我用那个。 howtogeek.com/howto/windows-vista/…
    • 您可以改用硬链接
    • @KindDragon:你不能硬链接目录
    【解决方案3】:

    您要做的是在子模块中创建一个分支并将文件夹向上移动并删除您不需要的内容。然后,您可以改为管理该分支。如果您想推进您的更改,您应该能够先返回合并。 Git 会知道您移动了文件并成功进行了合并。

    希望这会有所帮助。

    【讨论】:

    • 什么是“反向合并”?你能举个例子吗?
    • 一种“上游”的合并——从高阶分支到低阶分支。莱纳斯讨厌那些。它们与可能已经合并的其他分支的历史相关。
    • 在这种情况下您能否添加一些关于“反向合并”的示例?
    • 通常是在您尝试通过合并来自每个人都在合并其最新更改的主线分支中的事物来保持您的功能分支最新的时候。这很糟糕,因为它将您的分支与其他人的工作联系在一起。如果产品需要您的分支,但不需要集成分支中的其他分支之一,这是不可能的。
    • 有趣的想法,有人试过吗?我打算很快尝试,但仍然不确定“反向合并”是否可以清晰和自动化......
    【解决方案4】:

    这里的所有答案都已经过时了。您可以使用较新的git sparse-checkout 命令docs herethis article 中的更多示例来获取 repo 的片段。如果您只想要一个较大的 git 项目中的一两个目录,这很有效。

    TLDR:

    git sparse-checkout init --cone
    git sparse-checkout set <dir1> <dir2> ...
    git checkout main
    

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 2020-05-05
      • 1970-01-01
      • 2021-09-21
      • 2021-02-06
      • 2017-02-23
      • 2019-01-19
      • 2019-08-09
      • 2014-02-17
      相关资源
      最近更新 更多