2013-10-07 3 views
0

Я пытаюсь создать комплект для удаленной команды. У них есть копия депо из ревизии 892, и мы в настоящее время находимся в редакции 1119.hg bundle not working

Сначала я попробовал исправления, но создал тонну файлов, которые были повреждены при попытке их применения (как правило, при объединении). .. и наш репозиторий имеет размер 17 ГБ, поэтому я пытаюсь создать дельта-патч, таким образом, я понял, что пакет hg идеально подходит для этого.

Я создал связку с помощью:

>hg bundle --rev 1119 --base 892 depot-892-to-1119.bundle 

Это создало расслоение файл, 350MB, что является приемлемым и чувствует себя хорошо.

Но когда мы применяем его на склад назначения, который только идет к пересмотру 892 он barfs на:

E:\dest-depot>hg unbundle -u depot-892-to-1119.bundle 
adding changesets 
transaction abort! 
rollback completed 
abort: [email protected]: unknown parent! 

И до сих пор это похоже на ряд других вопросов, которые я видел во время поиска, но я Сделаем еще один шаг.

Я искал e5cc33458251 в источнике (более крупное депо), и он отображается как ревизия 930, которая явно после rev 892, но указывает, что это причина отказа. Разумеется, в целевом хранилище нет ревизии. Вот почему я создал комплект в первую очередь .... так что я не совсем уверен, почему это вызывает у меня проблемы.

Теперь у нас есть несколько филиалов в депо, а rev 892 - на ветку «Патч 2.7», а не по умолчанию. Я не знаю, должно ли это вызвать проблему. В конце концов эта ветвь патча была возвращена обратно в дефолт в версии 999.

930 на самом деле было очень маленьким и тривиальным изменением кода, а также в ветке «Патч 2.7». На графике пересмотра на самом деле было 2 строки патча 2.7, и они были объединены в 932. Но опять же ничего странного.

Я не вижу проблемы здесь. Любые идеи о том, какой пучок я должен генерировать? Или, если я пойду по другому пути?

ответ

1

Это звучит, как вы делаете это по существу правильно, так что давайте проверить несколько возможных подводных камней:

Вы знаете, что номера ревизий не переносим на клонов? Вполне возможно, что «их» 892 отличается от вашего. Таким образом, вы должны узнать, что их последняя ревизия является nodeid и использовать это как параметры для базы.

Я понимаю, что с их удаленностью с использованием внутреннего протокола ¯hG на самом деле передачи данных может оказаться невозможным, но если вы можете получить их, чтобы встать на hg serve за короткое время вы можете просто сделать:

hg bundle ../depot-to-them.bundle http://THEIR_IP:8000 

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

Те, кто в стороне, могут только упомянуть о том, что, используя --rev X --base Y, вы говорите: «Я хочу отправить всех предков X, которых у них нет, если у них есть только Y и его предки ", поэтому, если есть ветка, которая еще не объединена с X, вы не собираетесь ее отправлять, даже если локально номера версий находятся между X и Y. Это не будет, однако, препятствует тому, чтобы пакет был применен, так что это более понятной, а не возможной причиной ваших проблем.

+0

Да, действительно, вы правы. Так что проблема в том, что я строил пакет из своего рабочего каталога (где я всегда редактировал код и т. Д.) И сделал ошибку, что rev 892 на моей ревизии соответствовал 892 в целевом хранилище ... и они были разными (было фактически 894). Способ создания правильного пакета состоит в том, чтобы использовать информацию хэш-тега вместо номера версии. ** Не делайте этого ** > рт.ст. расслоение --rev 1119 --Base 892 депо-892-к-1119.bundle ** ли это ** > рт.ст. расслоение --rev 1119 - base e5cc33458251 depot-892-to-1119.bundle –

+0

Прохладно, я думал, что может быть так. Номера версий должны считаться действительными только в местной кассе. Если вы поместите его в электронное письмо, вы просите о неприятностях. –