Сжатие истории изменений Mercurial

#mercurial #tortoisehg

#mercurial #tortoisehg

Вопрос:

У нас более 2700 ревизий, и загрузка Mercurial занимает 30-45 секунд при выполнении слияния, push или чего-либо еще с помощью TortoiseHg. Мне интересно, есть ли другой способ, кроме прямого создания нового репозитория, для очистки истории изменений. Скажем, отключите файлы до версии 2400 или около того.

Комментарии:

1. Предполагая, что этот графический интерфейс является TortoiseHg?

Ответ №1:

Не ответ на ваш вопрос, но:

Возможно, помогает уменьшение «размера пакета журнала» до 100 (по умолчанию 500) в настройках.

Наш репозиторий с более чем 2300 оборотами загружается за 2-3 секунды (с моего SAS-диска 15k rpm, но это неважно), поэтому я не думаю, что ваша проблема в большом количестве оборотов, на самом деле. Существуют гораздо большие репозитории. 🙂

Обратите внимание, что разработчики как Mercurial core, так и TortoiseHg заинтересованы в поиске ошибок производительности, поэтому, возможно, стоит обратиться за помощью к спискам рассылки.

Ответ №2:

Вы можете использовать расширение histedit для сжатия нескольких наборов изменений в один. Выполнение команды histedit для ряда ревизий приведет к появлению текстового документа, который выглядит следующим образом (из документации histedit):

выберите c561b4e977df Добавить бета
выберите 030b686bedc4 добавить гамма
выберите 7c2fd3b9020c Добавить дельта

История редактирования между c561b4e977df и 7c2fd3b9020c

Команды:
p, выбрать = использовать фиксацию
e, редактировать = использовать фиксацию, но остановиться для внесения изменений
f, fold = использовать фиксацию, но сворачивать в предыдущую фиксацию
d, drop = удалить фиксацию из истории

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

ПРЕДУПРЕЖДЕНИЕ:

Использование histedit изменит историю репозитория, включая идентификаторы хэшей, что вызовет проблемы, если вы не запустите каждого разработчика заново с новым клоном репозитория после внесения изменений. Кроме того, вам, вероятно, потребуется ограничить вашу историю изменений наборами изменений с одним родителем (т. Е. наборами изменений без слияния).