Случайно зафиксировал большое количество необработанных данных в Mercurial, как я могу предотвратить перегрузку моего репозитория bitbucket? - PullRequest
7 голосов
/ 11 декабря 2011

Я скопировал большой объем данных с моего файлового сервера labs на свой ноутбук, а затем случайно отправил их в репозиторий Mercurial, который я использую для резервного копирования своей диссертации.

Теперь у меня есть 200+ МБ данных, которые мне не нужно занимать на жестком диске, даже после того, как я удалил файлы.На самом деле это не проблема, но репозиторий bitbucket, с которым я синхронизируюсь, дает мне только 1 ГБ пространства, которое мне понадобится для моих данных.

Глупо я затем удалил файлы и зафиксировал их снова, поэтому я не могу просто использовать откат, как описано в https://stackoverflow.com/a/3290523/961959, не создав новый репозиторий и не выполнив сброс настроек с помощью bitbucket.

Есть ли способ, как я могу это исправить, чтобы я не тратил четверть своего хранилища?Могу ли я откатить последние 2 коммита, которые я сделал?

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

Вы можете:

  1. Используйте hg strip, чтобы удалить набор изменений, в который вы добавили файлы, и все его потомки (обратите внимание, что это полностью уничтожит их, поэтому делайте это только в том случае, если эти файлы - единственное, что было передано за это время).
  2. Импортируйте эти наборы изменений в MQ и редактируйте их.
  3. Используйте hg convert от Mercurial до Mercurial с опцией --filemap.
  4. Клонируйте свой репозиторий до неисправной ревизии и вместо этого нажмите на нее, как описано в FAQ .
4 голосов
/ 12 декабря 2011

Я опишу, что бы я сделал, если бы я хотел откатить два последних коммита.

Полагаю, вы еще не перешли на Bitbucked. Я также предполагаю, что у вас есть эти наборы изменений поверх вашей DAG:

o  C: Deleted files FILE1 and FILE2
|
o  B: Some nice changes; also added large files FILE1 and FILE2
|
o  A: Some good changeset

Здесь C следует полностью удалить, B следует отредактировать (FILE1 и FILE2 дополнения следует откатить), а A и ниже следует оставить без изменений.

Предостережение : это работает только в том случае, если B и C еще не были перенесены в Bitbucked (или любой другой публичный репозиторий).

Для этого вам нужно включить расширение MQ. Для этого добавьте эти строки в файл .hg/hgrc в вашем репо:

[extensions]
mq=

Steps

Сначала я раздеваю C:

$ hg strip C

Теперь C уничтожен, а родительский B. Я импортирую B как Mercurial Queues patch , чтобы отредактировать его:

$ hg qimport -r B -n B.patch

Теперь у меня есть один патч поверх нашей очереди, который был создан из B. Я удаляю большие файлы и обновляю патч:

$ hg forget FILE1 FILE2 
$ hg qrefresh

Теперь B.patch больше не включает большие файлы. Тем не менее, они все еще находятся на диске, хотя и не контролируются Bu Mercurial. Теперь я заканчиваю свою работу с MQ:

$ hg qfinish -a

Вот что у меня есть на данный момент:

o  B1: Some nice changes, no big files here
|
o  A: Some good changeset
0 голосов
/ 28 августа 2014

Если изменения уже переданы в BitBucket, он предлагает возможность удалить наборы изменений с сервера. После локального выполнения strip вы должны получить доступ к URL:

https://bitbucket.org/<user>/<repo>/admin/strip

Будет предложено удалить все изменения после определенного коммита.

ПРИМЕЧАНИЕ. Раньше была ссылка для доступа к этому URL в меню конфигурации репо. Теперь кажется, что единственный способ получить к нему доступ - это набрать его напрямую.

...