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

rip*_*234 92 git git-submodules

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

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

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*air 60

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

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

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


Jus*_*ond 25

这里的所有答案都相当过时。您可以使用此处git sparse-checkout较新的命令文档和本文中的更多示例来获取存储库的各个部分。如果您只需要较大 git 项目中的一两个目录,那么这非常有效。

总而言之:

git sparse-checkout init --cone
git sparse-checkout set <dir1> <dir2> ...
git checkout main
Run Code Online (Sandbox Code Playgroud)

  • 如果文件位于您的(单声道)存储库中,这似乎很好,但是当您想要的文件是不同单声道存储库的子集(也称为子模块的子文件夹)时该怎么办? (4认同)

Art*_*ct2 23

您不能仅克隆存储库的一部分.这是因为混帐把仓库作为一个整体对象:当你得到它,你就会得到它所有.

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

  • Vista和&和MKLink一起来.我用它.http://www.howtogeek.com/howto/windows-vista/using-symlinks-in-windows-vista/ (7认同)

Ada*_*ruk 14

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

希望这可以帮助.

  • 什么是“反向合并”?你能举个例子吗? (2认同)