我有一个带子模块的Git超级项目,它本身包含一个子模块。一切都在私人GitHub存储库中,并通过HTTPS访问。这意味着.gitmodules
和.git/config
中存储的网址是HTTPS格式的。我正在编写一个需要提取最新代码的迷你构建服务器,但它需要使用SSH部署密钥,因为它不是可以输入GitHub密码的人。
建立一个Git URL重写规则适用于超级项目,但如果它们尚未被克隆,它们似乎会被子模块忽略:
$ git clone https://github.com/user/superproject.git
$ cd superproject
$ git config url.git@github.com:.insteadOf https://github.com/
$ ssh-agent sh -c "ssh-add id_rsa-deploy-key && git submodule update submod1"
最后一行中的git submodule update
忽略了网址重写规则,使用了HTTPS,并提示输入GitHub帐户&密码。
现在,如果已经克隆了一次存储库树(比如git submodule update --init --recursive
,使用HTTPS),那么URL重写规则可以正常工作并使用SSH。但是,如何将URL重写用于初始子模块克隆?