如果我添加一个当前不存在的子模块,则不会向.git/config
添加子模块信息。
$ mkdir testing
$ cd testing
$ git init
$ git submodule add git@git.server:submodule.git
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
但是,如果我添加当前作为子模块存在的仓库,则会将该网址添加到.git/config
:
$ mkdir testing
$ cd testing
$ git init
$ git clone git@git.server:submodule.git
$ git submodule add git@git.server:submodule.git
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[submodule "submodule"]
url = git@git.server:submodule.git
我原以为在这两种情况下,git submodule add
只会修改.gitmodules
,而git submodule init
会更新项目的.git/config
。
为什么.git/config
在第二种情况下被修改而不是第一种情况?有人可以解释这种行为的理性吗?
答案 0 :(得分:4)
这看起来很奇怪。这种行为是in this commit引入的:
commit c2f939170c65173076bbd752bb3c764536b3b09b
Author: Mark Levedahl <mlevedahl@gmail.com>
Date: Wed Jul 9 21:05:41 2008 -0400
git-submodule - register submodule URL if adding in place
When adding a new submodule in place, meaning the user created the
submodule as a git repo in the superproject's tree first, we don't go
through "git submodule init" to register the module. Thus, the
submodule's origin repository URL is not stored in .git/config, and no
subsequent submodule operation will ever do so. In this case, assume the
URL the user supplies to "submodule add" is the one that should be
registered, and do so.
Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
更新:您在下面的评论中指出,我对此提交消息的原始解释没有任何意义,因此我现在已删除该文本以避免其他人混淆。
如下面的评论中所述,cdwilson发布到git邮件列表中询问这种不一致性,因此Jens Lehman正在研究修复 - 该线程可以在这里找到:
答案 1 :(得分:3)