Mercurial Удалить Историю


есть ли способ в mercurial удалить старые наборы изменений из базы данных? У меня есть репозиторий, который составляет 60 ГБ, и это делает его довольно болезненным, чтобы сделать клон. Я хотел бы обрезать все до определенной даты и убрать огромную базу данных, чтобы собрать пыль.

2   51  

2 ответа:

вы можете сделать это, но при этом вы аннулируете все клоны там, так что это, как правило, неразумно делать, если вы не работаете полностью в одиночку.

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

если вы в порядке с изменением хэшей новых наборов изменений (который снова разбивает все клоны там в дикой природе), вы можете сделать это с помощью команд;

hg export -o 'changeset-%R.patch' 400:tip   # changesets 400 through the end for example
cd /elsewhere
hg init newrepo
cd newrepo
hg import /path/to/the/patches/*.patch

вам, вероятно, придется немного поработать, чтобы обработать наборы изменений слияния, но это общая идея.

можно сделать это с помощью hg convert С типом hg как исходные, так и целевые типы, а также с помощью splicemap, но это возможно, еще больше вовлечен.

больший вопрос заключается в том, как вы набираете 60 ГБ исходного кода или добавляете сгенерированные файлы против всех советов. :)

нет простого / рекомендуемого способа сделать это непосредственно в существующий репозиторий.

однако вы можете "конвертировать" свое РЕПО mercurial в новое РЕПО mercurial и выбрать ревизию, откуда включить историю вперед через преобразование.ртуть.вариант startrev

hg convert --config convert.hg.startrev=1234 <source-repository> <new-repository-name>

новое РЕПО будет содержать все, начиная с исходного РЕПО за вычетом истории, предшествующей начальной ревизии.

предостережение: новое РЕПО будет иметь полностью новые идентификаторы набора изменений, т. е. он никоим образом не связан с исходным РЕПО. После создания нового РЕПО каждый разработчик должен клонировать новое РЕПО и удалять их клоны из исходного РЕПО.

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