Git镜像作为“网关存储库”

时间:2019-01-14 12:09:14

标签: git

我需要使用git存储库,其中上游主存储库位于我无法直接访问的某个封闭网络中。我只能通过网关服务器访问它。让我们表示涉及的机器:

  • A:我要在其上进行编码的本地计算机
  • B:网关服务器
  • C:上游主服务器

我的想法是在B上创建一个git镜像:

B$ git clone --mirror address-of-C:my-repo.git

在A上,我通常会从B克隆,然后:

A$ git clone address-of-B:my-repo.git

但是如何使B和C保持同步?首先,在推送方向上,我想象通过在B上放置一个后接收挂钩很容易,它将接收到的更改进一步推送到C:< / p>

#!/bin/bash
git push origin
if [[ $? -ne 0 ]]; then 
  echo 'Mirroring failed!'
  exit 1
fi

但是,如果由于上游冲突导致钩子推送失败,这将导致严重失败,这使我处于一种奇怪的状态,在这种状态下,我应该在B的裸存储库中执行合并。我尝试通过{ 1}},但失败,并显示一条消息git fetch

第二,在拉方向上,我根本不知道如何执行此操作,因为不存在“预拉”挂钩之类的东西。我唯一的想法是要定期抽薪,但这听起来对我来说真的不对。

任何想法如何解决这种情况?我不是git专家,但是我认为git有无数的选项和功能,应该有一些方法可以做到这一点。

1 个答案:

答案 0 :(得分:3)

从技术上讲,这不能回答设置同步镜像的问题,但是您可以使用SSH隧道或类似方法通过B隧道到C。