当你发现用git clone下载的代码里面有文件 .gitmodules 的时候,说明里面还包含了子git库
就需要递归下载
例如执行了下面指令以后
git clone git地址
下载好以后,打开里面的文件.gitmodules
会看到文件有如下格式的子模块
[submodule "vendor/dm.pl"]
path = vendor/dm.pl
url = https://github.com/theos/dm.pl.git
[submodule "vendor/include"]
path = vendor/include
url = https://github.com/theos/headers.git
[submodule "vendor/lib"]
path = vendor/lib
url = https://github.com/theos/lib.git
[submodule "vendor/logos"]
path = vendor/logos
url = https://github.com/theos/logos.git
[submodule "vendor/nic"]
path = vendor/nic
url = https://github.com/theos/nic.git
[submodule "vendor/templates"]
path = vendor/templates
url = https://github.com/theos/templates.git
这个时候我们可以使用递归下载,会把里面的文件.gitmodules的子模块也下载好
git clone --recursive 仓库名
但是经常会提示xxx子模块没有权限下载,如下:
fatal: unable to access ‘https://github.com/xxx.git/’: LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
这是,cd进入已经下好的主模块目录中,然后执行下载子模块命令:
git submodule update --init --recursive
注意,每次下载完以后,进入下载好的子模块文件夹下,看看有没有新的.gitmodules 子模块文件,如果有,还要cd 进去,然后重新执行命令git submodule update --init --recursive .相当于手动的递归下载子模块
如果执行这条命令还是提示 443没有权限,也可以手动cd 到子模块文件夹下,然后执行git clone 子模块的git地址
例如,我上面的.gitmodules文件中第一个子模块叫vendor/dm.pl,这个模块的文件夹,在安装主模块的时候,已经创建好了文件夹,我只需要如下图cd进这个文件夹,然后执行git clone +url 就行了,例如这个例子就是: git clone https://github.com/theos/dm.pl.git
如果发现 git clone 还不好使,就直接打开这个网址,打开github网页,点击他的code->ssh,复制里面的地址:
例如下图的例子是复制:[email protected]:theos/dm.pl.git
然后:
git clone [email protected]:theos/dm.pl.git
发现这个git clone git@开头的好使了,可以下载,如下图:
然后可以打开打开子模块的文件把里面所有的url都用网页打开,然后分别到对应的目录里面git clone安装.
或者像下面这种修改 子模块的文件,然后再主模块里面一起安装.
这个就是问题所在.把这个地址,复制了,然后回到主模块下,修改里面的url
把里面所有的url https开头的都用网页打开,然后在里面找到code-ssh里的git@开头的地址,覆盖掉之前文件里的url,保存文件,如下图:
然后重新cd 到主模块的目录下,执行安装子模块命令:
git submodule update --init --recursive