重命名一个git子模块

有没有一种简单的方法来重命名git子模块目录(除了通过删除它并重新添加一个新的目标名称的整个动作)。

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


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

  • 更新.gitmodules
  • 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 (如statusdiff )的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

    上一篇: Rename a git submodule

    下一篇: How do I move an existing Git submodule within a Git repository?