Git克隆浅子模块

3

我添加了几个git子模块,它们在.gitmodules中被配置。 我对子模块的特定提交感兴趣。因此,我提交这些提交,可以在git子模块状态中看到。 例如:

[submodule "pcl"]
        path = libs/pcl
        url = https://github.com/PointCloudLibrary/pcl.git

子模块状态显示757e28a75a0c6c0413085a2af070670828a48527 libs/pcl。这意味着在运行git submodule update --init之后,将检出上述SHA1。
然而,我的问题是我不想完全克隆子模块pcl,因为我只对从757e28a75a0c6c0413085a2af070670828a48527开始的提交感兴趣。是否可以通过在.gitmodules文件中编写深度参数等方式来实现这一点?
我已经看过几篇文章,但大多数建议使用git add submodule。因为我已经做过这个了,所以有没有一种方法可以为每个子模块编辑带有深度参数的.gitmodule文件?
git clone --depth 10 --shallow-submodules <repo>

我认为你想要拉取主分支的10个提交,并随后拉取所有子模块的master分支的最新版本。我的理解是否正确?
1个回答

5

我找到了一个解决问题的方法,并且这可能有助于他人。

目标是浅克隆子模块。按照以下步骤进行操作后,项目大小(包括子模块)从30 GB缩小到2 GB。该项目由许多不断开发的子模块组成,如opencv、ffmpeg、pcl、mrpt等。

.gitmodule只包含子模块名称、路径和url(因此没有花哨的配置选项),如下所示:

[submodule "pcl"]
        path = libs/pcl
        url = https://github.com/PointCloudLibrary/pcl.git

所以,首先进行克隆操作,然后初始化子模块并最后更新子模块。
git clone --depth 10 <repo>
git submodule init
git submodule update --depth 10

如果出现错误 - 错误:服务器不允许请求未广告的对象SHA,请增加该特定模块的深度,例如100。

git submodule update --depth 100 <submodule> # for those modules, whose depth doesnt match. try with different depths.

如果成功,继续使用默认设置。

git submodule update --depth 10

希望这对某些人有所帮助,欢迎提供更多的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接