'git submodule add'没有克隆它

问题描述 投票:7回答:1

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

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

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

比方说,我有一个带有外源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

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

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

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

git git-submodules git-clone
1个回答
0
投票

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

但是我了解你的目的,我找到了两种方法来“解决”这个问题:

  • 不要添加本地子模块。而是为模块创建一个遥控器,并将此遥控器作为子模块添加到主项目中。只要您不初始化和更新子模块,代码就不会重复。
  • 第二种方式有点脏,但如果你不想为子模块创建一个遥控器,那么它可能很有用。您只需要像现在一样添加子模块,然后在此子模块上运行git deinit命令。只要你不再启动子模块,它就会让Git闭嘴
© www.soinside.com 2019 - 2024. All rights reserved.