Добавить дополнительные наборы изменений до набора изменений 0 (ноль)? - PullRequest
2 голосов
/ 23 марта 2012

У меня есть репозиторий Hg с набором изменений 0, представляющим просто «добавление .hgignore».Начиная с ревизии 1, я шаг за шагом добавлял ревизии из ряда ревизий Subversion скриптом.Затем я некоторое время работал с Hg.

Теперь я решил, что понадобится еще несколько Svn-ревизий, которые находятся в истории раньше, чем начальная ревизия (changeset 1 в Hg).

Можно ли вставить новые наборы изменений между 0 и 1?Если да: как?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Для этого вы можете использовать Mercurial * Mercurial . Для этого вам нужно включить расширение convert . Расширение позволит вам склеить историю вместе как часть конверсии. Это просто означает, что вы можете указать новых родителей для существующей ревизии.

Так что, если вы начнете с

$ hg glog
@  changeset:   1:aaee9686dedf
|  tag:         tip
|  user:        Martin Geisler <mg@lazybytes.net>
|  date:        Fri Mar 23 15:08:11 2012 +0100
|  summary:     bar
|
o  changeset:   0:17474bd28fe5
   user:        Martin Geisler <mg@lazybytes.net>
   date:        Fri Mar 23 15:08:05 2012 +0100
   summary:     foo

Сначала вы можете импортировать необходимые ревизии из SVN:

$ hg update null
$ run-your-script.sh

Это создаст вторую корневую ревизию - теперь в вашем хранилище фактически есть две непересекающиеся истории. Я сделал один набор изменений, где я добавил baz файл:

$ hg glog
@  changeset:   2:515e1292862b
   tag:         tip
   parent:      -1:000000000000
   user:        Martin Geisler <mg@lazybytes.net>
   date:        Fri Mar 23 15:09:19 2012 +0100
   summary:     baz

o  changeset:   1:aaee9686dedf
|  user:        Martin Geisler <mg@lazybytes.net>
|  date:        Fri Mar 23 15:08:11 2012 +0100
|  summary:     bar
|
o  changeset:   0:17474bd28fe5
   user:        Martin Geisler <mg@lazybytes.net>
   date:        Fri Mar 23 15:08:05 2012 +0100
   summary:     foo

Последний шаг - связать истории вместе: мы хотим, чтобы 17474bd28fe5 имел 515e1292862b в качестве первого родителя. Используйте hg log --debug для просмотра полных хэшей набора изменений и создайте файл карты срезов с помощью

17474bd28fe535c15c7dad3659994ab048146e99 515e1292862ba2d6776294ffb00c533dc6850c66

Затем запустите

 $ hg convert --splicemap map.txt your-repo your-spliced-repo

Вы найдете измененную историю в your-spliced-repo.

1 голос
/ 23 марта 2012

Как спросили: да, вы можете .

Я вижу как минимум 3 способа сделать это. Все - с расширениями

Импорт набора ревизий в подсказку, после импорта используйте любой из

  • Rebase (rebase -s tip -d X для каждой подвижной ревизии, N операций для N ревизий)
  • Histedit (редактировать с начала-ревизии, изменить порядок ревизии в окне редактора, 1 операция для N ревизий)
  • MQ (выбрать все ревизии, импортировать в MQ, изменить порядок ревизий в стеке патчей, отредактировать содержимое при необходимости, завершить все ревизии, N + 2 операции для N ревизий)

Я предпочту MQ как наиболее мощный выбор (внутри MQ я смогу отшлифовать прежние наборы изменений, чтобы лучше удалить конфликты и | или разбить изменения)

...