小编典典

重命名 git 子模块

all

是否有一些简单的方法可以重命名 git 子模块目录(除了完成
删除它并使用新目标名称重新添加它的整个动作)。

当我们这样做时,为什么我根本无法在父目录中执行以下操作:git mv old-submodule-name new-submodule-name


阅读 161

收藏
2022-07-04

共1个答案

小编典典

我发现以下工作流程有效:

  • 更新 .gitmodules
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

注意:这种方法不会.gitmodules在 2018 版本的 GIT 中正确更新索引。

注意:正如VonC的回答gitmv oldpath newpath中指出的那样,您现在也许可以这样做。(确保您使用的是最新版本的git)

Git1.8.5(2013 年 10 月)应该会简化流程。只需执行以下操作:

git mv A B

git mv A B“,当移动一个子模块时,A它被教导重新定位它的工作树并调整.gitmodules文件中的路径。


在提交 0656781fadca1中查看更多信息:

当前git mv在子模块上使用“”将子模块的工作树移动到超级项目的工作树中。但是子模块的路径设置.gitmodules保持不变,这现在与工作树不一致,并使依赖于正确path -> name mapping(如statusdiff)的 git 命令表现得很奇怪。

让“ git mv”在这里提供帮助,不仅可以移动子模块的工作树,还可以从文件和阶段更新“ submodule.<submodule name>.path”设置。 当没有找到文件时不会发生这种情况,并且只会在没有此子模块的部分时发出警告。这是因为用户可能只使用没有文件的普通 gitlinks,或者在发出“git mv”命令之前已经手动更新了路径设置(在这种情况下,警告会提醒他会为他这样做)。 仅当找到并包含合并冲突时,该命令才会失败并告诉用户在重试之前解决冲突。.gitmodules
.gitmodules``.gitmodules``mv
.gitmodules``mv


git 2.9(2016 年 6 月)将改进git mv子模块:

请参阅Stefan Beller ( )的提交 a127331(2016 年 4 月 19 日) 。(由Junio C Hamano 合并——提交 9cb50a3中,2016 年 4 月 29 日)stefanbeller
gitster

mv: 允许移动嵌套的子模块

git mv old new” 没有old/正确调整作为目录内子目录存在的子模块的路径。

然而,子模块需要更新它们到 git 目录的链接以及对.gitmodules文件的更新。

2022-07-04