克隆仓库时,Git子模块文件夹为空

199

我有一个托管在https://github.com/aikiframework/json上的仓库。在我的本地副本中,我使用以下命令添加了一个子模块:

git submodule add git@github.com:jcubic/json-rpc.git json-rpc

我进行了提交和推送,更改出现在 GitHub 上(我可以点击查看)。但是当我克隆该存储库时:

git clone https://github.com/aikiframework/json.git

子模块文件夹json-rpc是空的。

我错过了什么吗?我忘记了什么吗?为什么那个文件夹是空的?


4
如果你在使用git clone时忘记了--recursive标志,那么你可以运行git submodule update --init来进行更新。 - Charlie Parker
@CharlieParker 它在被接受的答案的第一个评论中。 - jcubic
1个回答

337
好的,我找到了,克隆存储库时需要添加--recursive
因此,克隆命令最终变为:
git clone https://github.com/aikiframework/json.git --recursive

请注意,如果你忘记了--recursive标志,你可以这样做(感谢@Amber):
git submodule update --init

请注意,当子模块拥有其他子模块时,您需要使用递归选项(感谢 @cpprust)。
git submodule update --init --recursive

274
没错。如果你已经克隆了但忘记使用--recursive选项,你也可以使用git submodule update --init命令在之后获取子模块。 - Amber
6
在开发分支上有一个子模块,但主分支上还没有。如果使用--recursive克隆git仓库,则无法在主分支上找到子模块,需要使用Ambers评论中的命令“git submodule update --init”来获取子模块。 - d4Rk
14
如果你使用 git submodule update --init 命令,那么你需要进入每个仓库并执行 git checkout master 命令,否则当你尝试更新到新版本时,在 git pull 命令中会出现错误提示:“You are not currently on a branch.”。请注意不改变原意,尽量让内容通俗易懂。 - Noitidart
@Noitidart 有没有一种方法可以不这样做?(在克隆项目之后) - borgr
1
@Noitidart 感谢您的 update --init 提示。当原始克隆没有包含 --recursive 并且只想拉取缺失的子模块时,这确实很有帮助。 - Jari Turkia
显示剩余4条评论

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