自动添加git子模块(.gitmodules)

时间:2014-07-16 10:05:15

标签: git git-submodules

我有一个带有几个子模块的仓库。我想添加其他一些,对我来说最快的方法是使用.gitmodules(在我看来应该明确允许任何类型的子模块管理)。

但是,在编辑此文件并添加子模块时,在添加git submodule init之后(除了修改前已存在的子模块)。

是否有任何解决方案可以在不经过git submodule add的情况下添加子模块(即,只需编辑.gitmodules文件,然后编辑git submodule update --init)?

也就是说,以下工作流程应自动添加子模块“ foo / bar ”:

Add the following to .gitmodules:
    [submodule "foo/bar"]
        path = foo/bar
        url = https://example.com/foo.git

Run the following command after saving:
    git submodule init
    git submodule update

Expected result:
    submodule 'foo/bar' automatically gets added
    it is also updated (the update command)

2 个答案:

答案 0 :(得分:0)

是的,正如您所描述的那样,一旦添加了子模块,它就会被添加到您的.gitsubmodule文件中。

但除非您确切知道自己做了什么,否则使用CLI命令会更好,因为可能会有一些您不熟悉的内容:

完成子模块文件的编辑后,您需要运行:

git submodule init
git submodule update

手动添加它将无法正常工作。

运行add子模块并观察.git文件夹更改。您将看到一个名为module的新文件夹,其中包含您的子模块名称。

这就是你不应该手动完成的原因。

答案 1 :(得分:0)

添加Git子模块时,Git将创建.submodule文件,并为名为git-submodule的子模块添加以下内容:

[submodule "git-submodule"]
    path = git-submodule
    url = https://github.com/TomasHubelbauer/git-submodule

在该文件中的现有内容之后,将相同内容添加到.git/config

.git/modules中创建以子模块命名的子模块的文件夹。 该文件夹与实际子模块存储库的.git目录几乎相同,但是不包含实际的objects(相反,子模块数据已检出到其目录中,并且其元数据在此处)

这意味着从理论上讲,您可以无需使用git submodule add即可手动添加子模块,但是必须重新创建所有这些配置文件。 但是,仍然可以想象将子模块存储库克隆到一个单独的目录,并将其.git复制到该目录中。 可能有效。

但是,添加子模块也会更改索引.git/index,因此您也必须手动更新此哈希,此时,您将手动重新实现Git。

因此,我认为手动添加Git子模块几乎不可行。