'git submodule add'没有克隆它

jvt*_*del 7 git git-clone git-submodules

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

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

git clone url-of-repo-containing-submodules.git
git submodule init sub-mod
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)

比方说,我有一个带有外源repo lib-sobmodule的git repo 元项目.

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

免责声明:这几乎是一个克隆问题,是否有办法在git submodule add没有克隆它的情况下回购?.但由于答案集中在30K git子模块的要求,他们没有给出我在这里描述的更常见用例的满意解决方案.

Pop*_*Hip 2

它们不是干净的解决方案,因为其目的是在主项目中克隆模块。在没有获取关联源代码的情况下添加没有远程的子模块是没有意义的。也许cat .git进入 metaproject/submoduledir 会让你相信这个机制。

不过我理解你的目的,并且我找到了两种“解决”这个问题的方法:

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

  • 第二种方法有点脏,但如果您不想为子模块创建远程,则可能很有用。您只需像已经做的那样添加子模块,然后git deinit在此子模块上运行命令。只要你不再次初始化子模块,它就会让 Git 关闭