如何将git子模块更改为指向子文件夹?

如何将git子模块更改为指向子文件夹?,git,git-submodules,Git,Git Submodules,略读一遍,我从中创建了一个子模块。然后,我发现我实际上只需要这个项目的一个子集——特别是文件夹 我想将我的子模块更改为指向此文件夹。当我查看.git模块时,我看到 [submodule "backup/src/boto"] path = backup/src/boto url = https://github.com/boto/boto.git 我应该使用什么URL来代替?更改URL后,是否应该在本地删除boto文件夹并重新拉取?恐怕子模块的URL总是指向存储库-您不能指定只需

略读一遍,我从中创建了一个子模块。然后,我发现我实际上只需要这个项目的一个子集——特别是文件夹

我想将我的子模块更改为指向此文件夹。当我查看.git模块时,我看到

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

我应该使用什么URL来代替?更改URL后,是否应该在本地删除boto文件夹并重新拉取?

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

如果无法将整个存储库作为子模块使用,则始终可以创建一个从boto克隆的新存储库,然后将cron作业设置为:

  • git将该存储库提取到一个目录中
  • 使用
    git filter branch
    更新子目录位于顶层的分支
  • 将存储库的该分支添加为子模块。然而,这一切都有点复杂,我的偏好是将整个存储库作为一个子模块

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


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

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


    希望这能有所帮助。

    这并不是你想要的,也不是子模块,但你可以看看我最后做的是拥有整个子模块,并告诉IntelliJ boto文件夹是一个“源文件夹”,所以它可以在里面找到软件包。我不敢相信git不会在本机上这么做…yikes.发现了一个类似的问题-我在windows中有符号链接。。。效果也很好。(这是因为我的机器上有msys,所以我可以像linux一样使用
    ln-s
    )Vista和MKLink。我用这个。你可以用硬链接代替什么是“反向合并”?你能举个例子吗?一个从高阶分支到低阶分支的“上游”合并。莱纳斯讨厌这些。它们与可能已经合并的其他分支的历史记录相关联。在这种情况下,您能否添加一些关于“反向合并”的示例?通常是在您尝试通过合并主线分支的内容来保持功能分支的最新状态时,每个人都在合并其最新更改。这是不好的,因为它将您的分支与其他人的工作联系在一起。如果产品需要您的分支,但不需要集成分支中已有的其他分支,则不可能。有趣的想法,有人尝试过吗?我将很快尝试,但仍然不确定“反向合并”是否可以清晰和自动化。。。