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

浏览SubModule教程 ,我从boto项目中创build了一个子模块。 然后,我发现我实际上只需要这个项目的一个子集 – 特别是boto文件夹。

我想改变我的子模块指向这个文件夹。 当我看着.gitmodules时,我明白了

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

我应该使用什么URL而不是https://github.com/boto/boto.git ? 在更改URL后,我应该在本地删除boto文件夹并重新提取?

恐怕子模块的URL总是指向存储库 – 你不能指定你只需要一个存储库的子文件夹,就像git不支持“狭义克隆”一样。

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

  1. git fetch将该资源库git fetch到一个目录中
  2. 使用git filter-branch更新子目录位于顶层的分支。
  3. 将该存储库的分支添加为子模块。 但是,这一切都有点儿烦恼,我的偏好只是将整个存储库作为一个子模块来生活。

您不能仅克隆存储库的一部分。 这是因为git将存储库视为一个整体对象:当你得到它时,你就可以完成所有的任务

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

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

希望这可以帮助。