如何将Git子模块移动到子目录?

29

大家好,我刚使用Git的子模块来组织一些代码库,这是地址:repos

我想将所有子模块移动到一个名为“repos”的新目录中,例如jquery -> repos/jquery。

我修改了.gitmodules文件,但似乎没有生效。我该怎么办?


1个回答

43
自 git 1.8.5 起,
git mv old/submod new/submod 

这个功能可以按照预期工作并为您处理所有的管道。您可能需要使用git 1.9.3或更新版本,因为它包括了子模块移动的修复。

鸣谢:下面评论中的Mike Lowerey

原始回答

刚才也遇到了同样的问题,最后删除了子模块引用(如本文所述),并在我想要的位置重新创建了它。

按照您将子模块jquery移动到repos/jquery的示例

  1. .gitmodules中删除(通常是三行)子模块引用。
  2. 检查.git/config以查找子模块的引用并删除它们(如果存在)
  3. 执行git rm --cached jquery来从存储库中删除子模块引用
  4. 删除旧的子模块文件夹
  5. 使用git submodule add git://github.com/jquery/jquery.git repos/jquery重新创建子模块引用(可能与之前相同)
如果您的子模块已经设置为特定标签,或提交(在稳定项目中肯定会这样做),那么您将需要再次设置它。
由于这个复杂的过程,我强烈希望有一种更简单的方法来实现这个目标(至少在git路线图上)。如果没有,肯定可以拼凑一些脚本来更快地完成这个过程...

23
自Git 1.8.5以来,使用git mv old/submod new/submod可以正常工作并为您处理所有的管道操作。您可能希望使用Git 1.9.3或更新版本,因为它包含了移动子模块的修复程序。(来源) - Mike Lowery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接