Я ищу команду, которая выведет список последовательных исправлений, которые применялись бы корректно, если бы репозиторий находился в определенном ранее известном состоянии. Вот hg glog
репозитория, который содержит некоторые проблемы, с которыми я столкнулся (также доступен на https://bitbucket.org/dusty/funny_repo/, если вы хотите поиграть с ним в свой собственный клон):
@ changeset: 8:ffd749c92f3b
| tag: tip
| summary: h
|
o changeset: 7:bc959885f6aa
|\ parent: 6:dfe021fa52a4
| | parent: 5:4d8bc738f0ab
| | summary: MERGE
| |
| o changeset: 6:dfe021fa52a4
| | parent: 3:1374ea53e7b7
| | summary: e
| |
o | changeset: 5:4d8bc738f0ab
| | branch: branch2
| | summary: g
| |
o | changeset: 4:e46fa4632d36
|/ branch: branch2
| summary: f
|
o changeset: 3:1374ea53e7b7
| summary: d
|
o changeset: 2:59712a781f0c
| branch: branch1
| summary: c
|
o changeset: 1:ff7f8724ad17
| branch: branch1
| summary: b
|
o changeset: 0:a3b3a87aa422
summary: a
По сути, я хочу знать, какой набор изменений передать hg export
, чтобы вывести наборы изменений 0, 1, 2, 3, 6, 7 и 8. Мне не нужны наборы изменений 4 и 5, потому что «эффект» этих наборов изменений применяется в коммите слияния в наборе изменений 6.
ancestors(default)
выводит все наборы изменений, но branch('default')
игнорирует наборы изменений 1 и 2, которые, хотя и находятся в другой ветке, необходимы для корректного применения исправлений.
Очевидно, что для этого случая я мог бы использовать hg log -r "0..default and not branch(branch2)"
, но я ищу более общий набор команд, который будет работать во всех случаях.
Для тестирования я использую команду hg export -r "0..default and not branch(branch2)" -o ../%R.patch
и следующий цикл for для применения полученных патчей:
cd ../
mkdir patched
cd patched
for n in ../*.patch ; do
patch -p1 <$n
done
branch2
. Проблема, которую я вижу, заключается в том, что если бы вы могли найти решение (всегда выбирая веткуdefault
), оно бы не сработало, если бы у вас было две безымянных ветки, что весьма вероятно (вероятно, больше, чем именованные ветки, в зависимости от вашего рабочий процесс?). В этих случаях вы хотели бы выбрать веткуdefault
, но это может быть и то, и другое. - person icabod   schedule 19.12.2012