0

我知道摘要信息量不大,所以我会尽力详细解释问题。我们正在开发与承包商负责的代码库部分交互所需的代码。所以我们想要访问承包商的代码,但我们不能都直接访问他们公司的服务器。

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

所以他的本地回购是我们的中间人。问题是承包商的代码包含子模块,当我们从代码服务器克隆 repo 时,这些子模块不会自动下拉。当我们尝试做

$git submodule update

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

有没有一种聪明的方法可以让子模块也被推送到第二个遥控器,以便我们可以在本地使用它们?

4

1 回答 1

1

您需要在代码服务器上为每个子模块提供一个裸仓库。现在承包商需要将这些 repos 作为远程添加到他的子模块(给所有这些远程相同的名称,例如external。将主 repo 推送到您的服务器后,他然后git submodule for-each 'push external HEAD:tempbranch'在主 repo 中运行。这会将所有子模块推送到您的服务器.

最后你需要看看你的.git/config——在那里你会看到如何让子模块使用你自己的服务器而不是客户端的。然后运行git submodule update

注意:这仅在子模块只有一个分支时才有效。如果不是这种情况,调用push external HEAD:tempbranch将覆盖另一个分支头。您首先需要拉出所有子模块中的所有分支。要实现这一点,您可以使用git -upgit submodule for-each up或在这里查看:“git pull --all”可以更新我所有的本地分支吗?替代解决方案。接下来你需要运行git submodule for-each push --all.

于 2013-02-27T00:08:05.783 回答