我们正在将 git 用于多个项目,这些项目使用数百个子模块。大多数项目都使用相同的子模块,但是当将它们克隆到本地磁盘上时,每个项目都会收到每个使用的子模块的完整克隆。
这会导致较高的网络传输和硬盘空间使用率。
有没有办法为所有这些 git 存储库定义参考存储库?
由于子模块的 URL 可以是任何内容,因此该 URL 的 SHA1 哈希值可能可以用作文件夹名称
我会考虑这样一个命令:
git clone --reference-if-able d:\GitRefRepos\"sha1(<URL>)" --recursive <URL>
或者更好的配置
git config use-reference-if-able.folder d:\GitRefRepos\
git config use-reference-if-able.url2folder SHA1
git clone --recursive <URL>
我希望通过对所有项目使用相同的子模块参考存储库来减少硬盘空间和网络传输时间。
是的,这是可行的,并且比您提出的方法更容易。
您可以找到一些自定义脚本来帮助设置和管理 git“缓存”的过程,但要点是您可以设置单个文件夹(如果需要)作为参考裸存储库。它可以保存任意数量的存储库的“对象”。
然后,您将在克隆时
--reference
该存储库目录,这将根据您的需要减少网络传输时间和硬盘空间。
--reference
选项传递给 git submodule update
,然后将其传递给子模块的 git clone
命令。