Mercurial Удалить Историю
есть ли способ в mercurial удалить старые наборы изменений из базы данных? У меня есть репозиторий, который составляет 60 ГБ, и это делает его довольно болезненным, чтобы сделать клон. Я хотел бы обрезать все до определенной даты и убрать огромную базу данных, чтобы собрать пыль.
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 для удаления нежелательных файлов.