Назад | Перейти на главную страницу

Повреждение репозитория Mercurial

Это отчасти связано с этот вопрос но это другой вопрос.

У нас есть центральный репозиторий Hg, обслуживаемый пользователями через SSH и меркуриальный сервер. К нему подключается ряд клиентов Mac, Linux и Windows.

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

Хотя, к сожалению, я недостаточно знаю Mercurial, чтобы написать такой скрипт. Есть ли вероятность, что кто-то еще сталкивался с этим? Лично я не совсем уверен, почему hg не делает этого по умолчанию.

Последние версии Mercurial (начиная с 1.5) поддерживают проверку входящих данных. Добавить

[server]
validate = True

в конфигурацию hg вашего сервера (либо .hg/hgrc или конфигурация hgwebdir должна работать нормально), чтобы сервер проверял входящие данные и отклонял недопустимые нажатия. Затем клиент увидит ошибку, похожую на:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

Надеюсь, это поможет!

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

По крайней мере, это совет, который мне дал мой друг, когда я переходил с SVN на Mercurial.

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

Не могли бы вы сделать то же самое, что и Блог Дэвида Херрона, но вместо того, чтобы делать это при предварительной маршрутизации, сделать это на крюке precommit в центральном репо?

Одна из возможных альтернатив:

  1. Клонируйте репозиторий ПОСЛЕ нажатия.
  2. Проверить это.
  3. Если репозиторий хороший, заархивируйте его как последний хороший
  4. Если репозиторий поврежден, поднять тревогу
  5. При возникновении тревоги восстановите последний из известных исправных хранилищ.

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