Мне нужно работать с 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 должен быть какой-то способ сделать это.