是否有一些简单的方法可以重命名 git 子模块目录(除了完成 删除它并使用新目标名称重新添加它的整个动作)。
当我们这样做时,为什么我根本无法在父目录中执行以下操作:git mv old-submodule-name new-submodule-name
git mv old-submodule-name new-submodule-name
我发现以下工作流程有效:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
注意:这种方法不会.gitmodules在 2018 版本的 GIT 中正确更新索引。
.gitmodules
注意:正如VonC的回答gitmv oldpath newpath中指出的那样,您现在也许可以这样做。(确保您使用的是最新版本的git)
gitmv oldpath newpath
Git1.8.5(2013 年 10 月)应该会简化流程。只需执行以下操作:
git mv A B
” git mv A B“,当移动一个子模块时,A它被教导重新定位它的工作树并调整.gitmodules文件中的路径。
A
在提交 0656781fadca1中查看更多信息:
当前git mv在子模块上使用“”将子模块的工作树移动到超级项目的工作树中。但是子模块的路径设置.gitmodules保持不变,这现在与工作树不一致,并使依赖于正确path -> name mapping(如status和diff)的 git 命令表现得很奇怪。 让“ git mv”在这里提供帮助,不仅可以移动子模块的工作树,还可以从文件和阶段更新“ submodule.<submodule name>.path”设置。 当没有找到文件时不会发生这种情况,并且只会在没有此子模块的部分时发出警告。这是因为用户可能只使用没有文件的普通 gitlinks,或者在发出“git mv”命令之前已经手动更新了路径设置(在这种情况下,警告会提醒他会为他这样做)。 仅当找到并包含合并冲突时,该命令才会失败并告诉用户在重试之前解决冲突。.gitmodules .gitmodules``.gitmodules``mv .gitmodules``mv
当前git mv在子模块上使用“”将子模块的工作树移动到超级项目的工作树中。但是子模块的路径设置.gitmodules保持不变,这现在与工作树不一致,并使依赖于正确path -> name mapping(如status和diff)的 git 命令表现得很奇怪。
git mv
path -> name mapping
status
diff
让“ git mv”在这里提供帮助,不仅可以移动子模块的工作树,还可以从文件和阶段更新“ submodule.<submodule name>.path”设置。 当没有找到文件时不会发生这种情况,并且只会在没有此子模块的部分时发出警告。这是因为用户可能只使用没有文件的普通 gitlinks,或者在发出“git mv”命令之前已经手动更新了路径设置(在这种情况下,警告会提醒他会为他这样做)。 仅当找到并包含合并冲突时,该命令才会失败并告诉用户在重试之前解决冲突。.gitmodules .gitmodules``.gitmodules``mv .gitmodules``mv
submodule.<submodule name>.path
.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
stefanbeller
gitster
mv: 允许移动嵌套的子模块 ” git mv old new” 没有old/正确调整作为目录内子目录存在的子模块的路径。 然而,子模块需要更新它们到 git 目录的链接以及对.gitmodules文件的更新。
” git mv old new” 没有old/正确调整作为目录内子目录存在的子模块的路径。
git mv old new
old/
然而,子模块需要更新它们到 git 目录的链接以及对.gitmodules文件的更新。