如何在本地克隆子模块时使用“git clone --recursive”命令?

7
我习惯于将git克隆到磁盘上的主位置,然后使用本地git克隆来缩短下载和复制时间。然而,如果我克隆一个有子模块的项目,git clone --recursive,它将对主存储库使用--local,但子模块初始化仍然是通过URL引用的,这意味着我还需要再次进行下载。有没有办法使git clone --recursive从子模块的本地副本中克隆,而不是典型位置?

我通过执行 git clone,然后编辑每个条目的 url,将其指向我的本地 repo + 来自同一条目的路径来完成此操作,它可以实现我想要的功能。但是感觉应该有更好的方法。 - Peter Martini
1个回答

0

这是我的救星:

git submodule update --init --recursive

这个命令可以初始化子模块并克隆它们,即使你的子模块中还有子模块。我在我的bash_profile中设置了一个别名,总是用它来处理空仓库和简单的更新操作。

alias gsu='git submodule update --init --recursive'

2
对的,但它是从规范源进行克隆:如果我从github克隆到/srv,然后从/srv克隆到我的/home,那么从/srv到/home的递归位仍然会命中子模块的规范URL(在这种情况下为github),而不是从/srv/foo/submodule进行克隆。我正在尝试完全脱机git克隆,但似乎我不能没有直接更新.gitmodules :-( - Peter Martini
哦,那我很抱歉!一开始我没有理解清楚你的问题。难道你不能手动为所有子模块设置源吗?但是你为什么需要这样做呢?我的意思是,你不能在 GitHub 上创建另一个源吗? - iosifv

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