【问题标题】:How to change a git submodule's name only, leaving its path unchanged?如何仅更改 git 子模块的名称,保持其路径不变?
【发布时间】:2020-09-19 19:02:39
【问题描述】:

假设.gitmodules 文件包含以下几行

[submodule "sub/x"]
    path = sub/x

...由形式的命令产生

git submodule add $url sub/x

事后(并且在向超级项目和子模块添加了几个提交之后),我意识到我应该运行它:

git submodule add --name x $url sub/x

...这样.gitmodules 文件中与前面引用的两行相对应的两行将是

[submodule "x"]
    path = sub/x

我想修复超级项目,使子模块的名称x而不是sub/x,但路径仍然是sub/x 1.

我的直接兴趣是学习如何修复超级项目的历史记录(例如,通过交互式变基),以便最终 repo 看起来就像第二个 git submodule add 命令是一个从一开始就使用。 (FWIW,这个 repo 还没有发布,虽然我确实打算这样做。)但是,为了将来参考,我也有兴趣学习如何在不修改历史的情况下做到这一点,即通过添加一个或多个新提交到它。

我试图删除子模块并再次添加它(基于here 给出的git submodule deinit 配方),但我很快发现自己一团糟。 (我认为问题的一部分是,正如我已经提到的,我已经向子模块添加了几个提交,并在此过程中对超级项目的子模块信息进行了相应的更新。)

因此,我希望找到有关如何进行此重命名的更直接的指导。


1 有一个earlier post,其标题表明它正是在问我在这里问的问题,但实际上该帖子不仅询问如何重命名子模块,还有如何改变它的路径。原来那个问题的答案大部分内容都集中在改变模块路径的问题上。

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    我认为重命名 .git/config.gitmodules 中的部分就可以了:

    git config                --rename-section submodule.sub/x submodule.x
    git config -f .gitmodules --rename-section submodule.sub/x submodule.x
    

    【讨论】:

    • 注意,修改.gitmodules文件后,一般要添加并提交。自己提交重命名似乎是明智的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2020-12-05
    相关资源
    最近更新 更多