Как восстановить Git после фатальной ошибки файловой системы?
Вопрос
Какой самый быстрый способ восстановить репозиторий git после ошибки файловой системы на главном сервере?
Представьте, что центральный сервер вашего проекта OSS выходит из строя, и все коммиты за два дня теряются после восстановления.Как ты получаешь их обратно?Достаточно ли просто вызвать "git push" на всех клиентах?Или есть что-то еще, что я должен принять во внимание?
Решение
Каждый репозиторий также является резервной копией “основного репозитория” (который является “основным” только по соглашению), так что git push
из репозитория, который сделал самый последний git fetch
или git pull
должно быть все, что нужно — до его состояния, конечно.Вам нужно только позаботиться о крючках и тому подобном, но если вы скажете, что были потеряны коммиты только за последние два дня, они, вероятно, все равно не пострадали.
Другие советы
A git pull
и затем a git push
должно быть достаточно.
Поочередно a git push -f
принудительно обновит сервер вашей локальной копией, но это может вызвать проблемы у других (если есть несколько коммиттеров).
Дайте нам знать, если вы столкнетесь с какими-либо дальнейшими проблемами или ошибками.
Я думаю, было бы лучше создать новое репозиторий на сервере:
% ssh user@server
% mv /path/to/repo /path/to/repo.old
% mkdir /path/to/repo
% cd /path/to/repo
% git init --bare
Затем нажимайте на все различные клоны, которые у вас есть.Я думаю, что это позволило бы избежать любых поврежденных файлов, которые могут быть в старом репозитории, и потерь вообще быть не должно, при условии, что вы все работаете над своими собственными клонами, и никто не возится в репозитории сервера.