Git mirror как "хранилище шлюза" - PullRequest
0 голосов
/ 14 января 2019

Мне нужно работать с git-репозиторием, где основной репозиторий находится в закрытой сети, к которой у меня нет прямого доступа. Я могу получить к нему доступ только через сервер шлюза. Обозначим задействованные машины:

  • A: Мой локальный компьютер, на котором я кодирую
  • B: сервер шлюза
  • C: Главный сервер восходящего направления

Моя идея состояла в том, чтобы создать git mirror на B:

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:

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

Однако, это ужасно терпит неудачу, если толчок в ловушке терпит неудачу из-за конфликтов в восходящем потоке, оставляя меня в странном состоянии, в котором я должен выполнить слияние с пустым хранилищем в B. Я попытался смягчить это, выполняя git fetch в ловушке предварительного получения, но это не с сообщением error: ref updates forbidden inside quarantine environment.

Во-вторых, в направлении тяги я понятия не имею, как это сделать вообще, потому что не существует такого понятия, как крючок «предварительного натяжения». Моя единственная идея состоит в том, чтобы периодически тянуть к себе на работу, но это звучит не совсем правильно для меня.

Есть идеи, как решить такой случай? Я не эксперт по git, но я предположил, что с множеством опций и возможностей git должен быть какой-то способ сделать это.

1 Ответ

0 голосов
/ 14 января 2019

Технически это не отвечает на вопрос о настройке синхронизированного зеркала, но вы можете быть в состоянии туннелировать к C через B, используя SSH туннелирование или подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...