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

时间:2011-03-14 19:34:21

标签: git git-submodules

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

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

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

我应该使用哪个网址而不是https://github.com/boto/boto.git?更改URL后,是否应该在本地删除boto文件夹并重新拉?

3 个答案:

答案 0 :(得分:54)

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

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

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

答案 1 :(得分:21)

您无法仅克隆存储库的一部分。这是因为git将存储库视为一个完整的对象:当你得到它时,你会得到它所有

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

答案 2 :(得分:13)

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

希望这有帮助。