该git submodule add
命令接受该--name
选项,该选项允许您为子模块指定逻辑名称。否则,子模块以其创建的路径命名。
创建子模块后,有没有办法更改此逻辑名称?
从 Git 版本 2.30.1 开始,除了完全删除子模块并从头开始重新创建之外,我还没有找到使用 Git 命令行执行此操作的方法。
为了重命名 Git 子模块,有 4 件事需要更改:
.gitmodules
文件中子模块标题的名称。.git/modules
树下的位置。.git
子模块中文件的内容。.git/modules
。这是可行的,但可能很混乱。如果您勇敢、鲁莽和/或绝望,请继续。
假设您有一个保存在 中的子模块vendor/libfoo
,现在您想为其指定逻辑名称vendor-libfoo
而不更改其在工作树中的物理位置。
下面是对应的.gitmodules
文件:
[submodule "vendor/libfoo"]
path = vendor/libfoo
url = https://git.example.net/libfoo
并且vendor/libfoo/.git
将是一个文本文件(不是目录,就像顶级 git repo 一样),包含:
gitdir: ../../.git/modules/src/libfoo
该文件指向存储 Git 数据文件的位置,即目录.git/modules/src/libfoo
.
该文件.git/modules/src/libfoo/config
将包含(除其他外):
[core]
worktree = ../../../../vendor/libfoo
所有这些都必须进行调整才能做出改变!
[submodule "vendor/libfoo"]
到[submodule "vendor-libfoo"]
,但没有改变path =
的是段落标题下面的选项。这会更改子模块的逻辑名称而不更改其路径。.git/modules/vendor-libfoo
而不是.git/modules/vendor/libfoo
. 因此,我们必须将后者重命名为前者,以反映步骤 1 中的更改。vendor/libfoo/.git
将是错误的,因为相对路径将不再指向正确的位置。我们必须更改../../.git/modules/vendor/libfoo
为../../.git/modules/vendor-libfoo
,以反映步骤 2 中的更改。worktree = ../../../../vendor/libfoo
选项.git/modules/vendor-libfoo
也会出错。将其更改../../../vendor/libfoo
为反映我们已将此目录向上移动.git/modules
1 级的事实。显然,这些步骤需要根据您的特定情况进行调整。我不保证此程序在任何情况下的正确性或有效性。
理论上,这个过程可以被脚本化/自动化,但正确解析 Git 配置格式可能会有困难。在大多数情况下,您可能可以使用正则表达式替换。
祝你好运!也许希望这个特性在以后的 git 版本中得到更多的关注。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句