' git submodule add'没有克隆它

时间:2017-03-03 16:38:58

标签: git git-submodules git-clone

如何在不实际克隆其包含的所有文件的情况下向项目中添加本地子模块?我想避免在本地复制我的项目文件。

我知道可以实现这种功能,因为当您克隆包含子模块的项目时,默认情况下不会克隆这些项目。你必须手动完成:

git clone url-of-repo-containing-submodules.git
git submodule init sub-mod
git submodule update --remote

比方说,我有一个git repo 元项目,带有一个外部源代码 lib-sobmodule

我可以破解它以避免文件重复:

cd /path/to/metaproject
git submodule add ../path/to/lib-sobmodule
git commit -m "lib-sobmodule added..."
git push
cd .. && rm -rf meta-project
git clone url-of-meta-project.git

Tadam!我的桌面上没有重复 lib-sobmodule 的文件。但它不是一个很好的解决方案,因为它导出然后导入/从git远程...

是否有一个选项或方法可以阻止克隆本地项目而不必复制它包含的所有文件?

Disclamer:这几乎是Is there a way to git submodule add a repo without cloning it?的克隆问题。但由于答案主要集中在 30K git子模块的要求,因此他们没有为我在此描述的更常见的用例提供令人满意的解决方案。

1 个答案:

答案 0 :(得分:0)

这不是干净的解决方案,因为其目的是在主项目中克隆模块。如果没有获得相关的源代码,则添加没有远程功能的子模块是没有意义的。也许cat .git进入metaproject / submoduledir会让您相信这种机制。

但是我了解您的目的,并且找到了两种方法来“解决”此问题:

  • 不添加本地子模块。而是为模块创建一个远程,然后将此远程作为子模块添加到您的主项目中。只要您不初始化和更新子模块,代码就不会在本地重复。

  • 第二种方法比较脏,但是如果您不想为子模块创建远程,则可以使用。您只需要添加子模块即可,然后在该子模块上运行git deinit命令。只要您不再次初始化子模块,它就会使Git关闭