将git子模块推送到下游远程服务器

将git子模块推送到下游远程服务器,git,Git,我知道总结的信息量不大,所以我会尽可能详细地解释这个问题。我们正在开发与承包商负责的代码库部分接口所需的代码。因此,我们希望能够访问承包商的代码,但我们不能都直接访问他们公司的服务器 我们所做的是在我们的代码服务器上设置了一个现场承包商的帐户。我们已经在代码服务器上为承包商的代码创建了一个裸git回购,并且我们已经设置了现场承包商的本地存储库,将我们的代码服务器作为下游远程服务器 所以他的本地回购协议是我们的中间人。问题是,承包商的代码包含子模块,当我们从代码服务器克隆回购协议时,这些子模块并没

我知道总结的信息量不大,所以我会尽可能详细地解释这个问题。我们正在开发与承包商负责的代码库部分接口所需的代码。因此,我们希望能够访问承包商的代码,但我们不能都直接访问他们公司的服务器

我们所做的是在我们的代码服务器上设置了一个现场承包商的帐户。我们已经在代码服务器上为承包商的代码创建了一个裸git回购,并且我们已经设置了现场承包商的本地存储库,将我们的代码服务器作为下游远程服务器

所以他的本地回购协议是我们的中间人。问题是,承包商的代码包含子模块,当我们从代码服务器克隆回购协议时,这些子模块并没有自动下拉。当我们试着去做的时候

$git submodule update
在我们本地的机器上,它试图从承包商的服务器上获取子模块


是否有一种聪明的方法允许子模块也被推送到另一个远程设备,以便我们可以在本地使用它们?

您需要在代码服务器上为每个子模块创建一个裸repo。现在,承包商需要将这些repo作为远程添加到其子模块中(使所有这些远程具有相同的名称,例如,
external
。将主repo推送到服务器后,他会为主repo中的每个“push external HEAD:tempbranch”运行
git子模块。这将把所有子模块推送到服务器

最后,您需要查看
.git/config
——在这里您将看到如何使子模块使用您自己的服务器而不是客户端的服务器。然后运行
git子模块更新


注意:这只在子模块只有一个分支的情况下才有效。如果不是这样,调用
push external HEAD:tempbranch
将覆盖另一个分支头。您将首先需要拉动所有子模块中的所有分支。要实现这一点,您可以使用
git submodule进行每个up
或在此处查看:寻找替代解决方案。接下来,每次推送都需要运行
git子模块--all

我昨天有机会尝试一下,一切都成功了。感谢您的帮助。