重命名一个git子模块
有没有一种简单的方法来重命名git子模块目录(除了通过删除它并重新添加一个新的目标名称的整个动作)。
虽然我们在这里,为什么我根本无法在父目录中执行以下操作: git mv old-submodule-name new-submodule-name
我发现以下工作流程工作:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
Git1.8.5(2013年10月)应该简化这个过程。 简单地做一个:
git mv A B
“ git mv AB
”,当移动子模块A
,教会重新定位其工作树并调整.gitmodules
文件中的路径 。
参见commit 0656781fadca1中的更多内容:
目前在子模块上使用“ git mv
”会将子模块的工作树移动到超级项目的工作树上。 但是.gitmodules
的子模块路径设置保持不变,现在与工作树不一致,并且使依赖于正确path -> name mapping
(如status
和diff
)的git命令行为异常。
通过不仅移动子模块的工作树,而且还从.gitmodules
文件更新“ submodule.<submodule name>.path
”设置,并在这两个阶段中设置“ git mv
”。
如果找不到.gitmodules
文件,则不会发生这种情况,只有在没有该子模块的部分时才会发出警告。 这是因为用户可能只是在没有.gitmodules
文件的情况下使用普通的.gitmodules
或者在发出“git mv”命令之前手动更新了路径设置(在这种情况下警告提醒他mv
会为他做这件事)。
只有找到.gitmodules
并且包含合并冲突时, mv
命令才会失败,并在再次尝试之前告诉用户解决冲突。
git 2.9(2016年6月)将改进子模块的git mv
:
见Stefan Beller( stefanbeller
)的提交a127331(2016年4月19日)。
(由Junio C gitster
- gitster
合并 - 在9cb50a3,2016年4月29日提交)
mv
:允许移动嵌套的子模块
“ git mv old new
”没有正确调整作为old/
目录内子目录的子模块的路径。
然而子模块需要更新它们到git目录的链接以及更新.gitmodules
文件。
$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync
这个解决方案对我来说不起作用,因为当使用git add命令时,子模块作为简单的目录而不是子模块被包含在项目中。
正确的解决方案是:
$ mv submodule-oldpath ~/another-location
$ git rm submodule-oldpath
$ git submodule add submodule-repository-URL submodule-newpath
资料来源:http://bcachet.github.io/development/2012/05/25/rename-git-submodule/
链接地址: http://www.djcxy.com/p/16451.html下一篇: How do I move an existing Git submodule within a Git repository?