为什么将现有的repo添加为子模块会修改.git / config?

时间:2011-05-21 17:36:04

标签: git add git-submodules

如果我添加一个当前不存在的子模块,则不会向.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在第二种情况下被修改而不是第一种情况?有人可以解释这种行为的理性吗?

2 个答案:

答案 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)