Восстановите orgin репозиторий, используя удаленный репозиторий - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь встроить некоторую избыточность в наше развертывание git помимо стандартной резервной копии.На бумаге казалось, что было бы легко восстановить репозиторий, который клонировали несколько пользователей, используя репозиторий, который я создал и связал / синхронизировал с использованием git remote.

В прошлом я сталкивался с проблемами с лентами резервных копий, либо получая плохую резервную копию, либо получая ленты с удаленного сайта.Я смотрю на удаленную возможность того, что сервер, на котором размещены локальные филиалы для потерянного репо, потерпел катастрофический сбой, и мне нужно восстановить и запустить большую исходную базу в кратчайшие сроки с минимальными перебоями.

Идея заключается в том, чтобы поддерживать внешний сервер, который просто бездействовал, получая обновления из рабочей коробки.Когда производственная коробка взорвалась, я затем сделал бы псевдоним сервера резервным сервером и сделал бы локальные копии «потерянных» удаленных веток

Пока что это то, что я думаю для пути восстановления для репозитория:

- grep for the dead servers alias
- Parse for the remote branch names
- checkout the remote branches to the recovery repository
- Remove the dead servers alias

EG с использованием tcsh:

foreach q (git branch -a | grep kaboom-1 | cut -f 2 -d '/')

git checkout -b branch kaboom-1 / branch

end

git remote rm kaboom

При тестировании это сработало замечательно, но тестирование в лаборатории не всегда напрямую отражается на жизнеспособности реального мира.Кто-нибудь выполнял этот тип восстановления в прошлом или вы видите проблему с этим методом?

1 Ответ

0 голосов
/ 24 февраля 2012

Звучит немного неловко, потому что в git есть хорошая функция резервного копирования с клоном и аргументом --mirror.Я использовал git clone --mirror в основном репо и просто обновлял свои зеркала (которые полностью идентичны) каждый раз, когда что-то отправлялось в главное репо.Если что-то идет не так, как надо, очень легко просто клонировать новый репо из одного из зеркальных клонов и продолжать.

Так что просто:

git clone --mirror main_repo.git

столько раз, сколько вы хотите для клонированного зеркалаосновного репо.Помните, что --mirror подразумевает --bare, поэтому у них нет никаких рабочих каталогов, как у основного репо.

Когда что-то происходит в главном репо, и вы хотите синхронизировать свои зеркала, в каждом зеркале выполните:

git remote update

Когда эта команда завершается, этот голый зеркальный клон снова становится идентичным основному репо.

...