Как я могу клонировать ревизию, не теряя номер ревизии? - PullRequest
2 голосов
/ 20 декабря 2011

У меня есть хранилище с двумя ветвями, default и BranchA. График выглядит примерно так:

default rev10 (Node: aaaaa)
default rev9 (Node: bbbbb)
default rev8
------------------BranchA rev7
------------------BranchA rev6
------------------BranchA rev5
default rev4
default rev3
default rev2
default rev1

Затем я узнал, что хочу клонировать репозиторий до ревизии 9, поэтому я клонировал его с помощью функции «Клонировать в ревизию». И заполняет номер редакции как: bbbbb.

Когда я открываю новый репозиторий, информация BranchA в нем отсутствует. График хранилища выглядит так:

default rev6 (Node: bbbbb)
default rev5
default rev4
default rev3
default rev2
default rev1

Могу ли я вернуть свой старый номер ревизии? Где информация о филиале?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Номера версий являются локальными для данного репозитория.Они просто сообщают вам порядок наборов изменений в репозитории - если у вас есть 6 наборов изменений, то они должны быть пронумерованы 0–5.Mercurial не может «изобретать» дополнительные номера ревизий, чтобы сохранить исходные номера ревизий в неизменном виде.

Причина, по которой номера ревизий являются локальными, заключается в распределенной природе Mercurial.Допустим, у нас обоих есть второй репозиторий выше с 6 наборами изменений.Если я создам новую ревизию, это будет номер 7 в моем хранилище.Mercurial просто выбирает следующее целое число.

Если вы также создадите набор изменений, то вы также получите номер 7. Теперь, если я вытащу вас, ваш номер 7 будет моим номером.8 - номер редакции меняется.Вот почему вы должны использовать глобально уникальный набор изменений хешей при общении с другими.Они остаются неизменными после push / pull.

Хеш-наборы изменений - это действительно 40 шестнадцатеричных символов: это 160-битные значения SHA-1 хеша.Mercurial обычно показывает только первые 12 символов, если вы не добавите --debug.Вы можете использовать префикс любого размера, чтобы указать набор изменений, поэтому любой из

$ hg log -r 41453d55b481ddfcc1dacb445179649e24ca861d # full
$ hg log -r 41453d55b481                             # normal
$ hg log -r 41453d                                   # smaller

сделает то же самое.Префикс должен быть уникальным только в репозитории, и обычно достаточно 12 символов для этого.Это 12-значное хеш-значение, к которому вы захотите обратиться при общении с коллегами («можете ли вы вытащить 41453d55b481 и протестировать снова?») Или при написании заметок о выпуске («ошибка была исправлена ​​в 41453d55b481»).

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

2 голосов
/ 20 декабря 2011

Когда вы предоставляете ревизию для команды hg clone, она вытягивает только этот набор изменений и всех своих предков в новый репозиторий в качестве новой головы.Без аргумента ревизии все наборы изменений будут клонированы, и нумерация также сохранится.Затем вы можете избавиться от rev10, используя hg strip.

...