Как уменьшить размер магазина Mercurial hg. Размер хранилища Hg превышает 5 ГБ, и сервер получает тайм-аут перед клонированием
Случайно я зарегистрировал 5 ГБ файлов в Mercurial. Наш сервер сборки начал сбой во время клонирования репо. Поэтому мы вернули проверенные файлы с помощью команды "Удалить". Но.hg/store/data все еще содержит эти файлы. И его размер превышает 5 ГБ. Мы искали в интернете и нашли несколько методов, таких как: hg convert. Но hg convert создает новое репо, которое в нашем случае нежелательно. Также мы не можем продлить период ожидания нашего сервера сборки.
Как можно полностью удалить неудачную регистрацию, не сохраняя ее в.hg/store/data? Или как мы можем уменьшить размер.hg/store/data?
2 ответа
Вот что вам нужно сделать: вам нужно удалить эти наборы изменений.
Поскольку ваш репозиторий размещен в Bitbucket, у вас нет прямого доступа к файлам, поэтому вам нужно использовать то, что предоставляет веб-сайт.
В вашем проекте репозитория в настройках есть раздел для удаления наборов изменений.
Обратите внимание, что это также удалит все наборы изменений, которые были зафиксированы поверх неверного набора изменений. Мы будем иметь дело с этим.
Подчеркну это:
- Делать
- Конечно
- Вы
- Есть
- Резервные копии!
Вот шаги
Важное замечание: Если у какого-либо разработчика в вашей команде есть что-то ожидающее на локальном уровне, например, наборы изменений, которые еще не были переданы в bitbucket, но они клонировали неверный набор изменений из bitbucket, то вам нужно сделать больше прививок, убедитесь, что вы понимаете все, что нужно сделано, прежде чем пытаться это.
- Убедитесь, что у вас есть хорошая резервная копия и локальный клон вашего репозитория, это первостепенное значение I (или переполнение стека) не несет ответственности, если вы в конечном итоге потеряете наборы изменений, которые хотите сохранить в этом процессе. Обратите особое внимание на предупреждение выше о not-pressed-changesets, которое могут иметь другие разработчики.
В локальном клоне сначала привейте все наборы изменений, которые были зафиксированы поверх неверного набора изменений, непосредственно перед набором изменений.
то есть. если история выглядит так:
1---2---3---BAD---5---6---7
Вы хотите привить 5-7 к вершине 3, чтобы потом иметь эту историю:
1---2---3---BAD---5---6---7 \ +--5---6---7
Затем удалите неверный набор изменений (и все, что за ним следует) с помощью этой команды:
hg strip BAD `BAD` here is the number or hash of the bad changeset
- Убедитесь, что все выглядит хорошо локально, а затем перейдите на bitbucket.org
- Найдите свой репозиторий, зайдите в Настройки и найдите раздел ревизий стрипов
- Введите хэш неверного набора изменений и попросите bitbucket удалить его
- Затем нажмите на локальный клон, чтобы вернуть наборы изменений, которые вы привезли, в bitbucket.
- Важное замечание: Теперь вам нужно получить всех, кто уже клонировал из bitbucket и получил плохую ревизию, чтобы удалить их локальный клон и откатиться. Это обрушит свежую копию хранилища, без плохой ревизии.
-r
вариант hg clone
позволяет создать репозиторий без ревизий после определенной ревизии.
Таким образом, вы можете сделать следующее (при условии LAST_GOOD_CHANGESET
это набор изменений перед вашим неправильным коммитом):
hg clone -r LAST_GOOD_CHANGESET repo repo.1
mv repo repo.bak
mv repo.1 repo
Обратите внимание, что при этом будут сброшены все коммиты после вашего неправильного коммита, поэтому вам придется переигрывать важные (т.е. исключая те, которые были сделаны при попытках исправить ошибку).
Кроме того, если у вас есть филиалы, вы должны перечислить их как дополнительные -r
аргументы hg clone
в противном случае они также будут удалены из очищенного хранилища.