Mercurial Удалить историю - PullRequest
52 голосов
/ 21 апреля 2010

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

Ответы [ 2 ]

47 голосов
/ 11 января 2012

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

Тем не менее, вы можете «конвертировать» ваше Mercurial репо в новое Mercurial Repo и выбрать ревизию, из которой будет добавлена ​​история, с помощью опции convert.hg.startrev

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

Новый репо будет содержать все от исходного репо за вычетом истории, предшествующей стартовой ревизии.

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

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

27 голосов
/ 21 апреля 2010

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

Каждое изменение в 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 ГБ исходного кода или добавляете сгенерированные файлы вопреки всем советам. :)

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