Могу ли я применить в Mercurial изменения из одного файла в другой файл в той же ветке? - PullRequest
7 голосов
/ 23 апреля 2010

В старые добрые времена Subversion я иногда получал новый файл из существующего, используя svn copy. Затем, если что-то изменилось в общих для них разделах, я все равно мог бы использовать svn merge для обновления производной версии.

Чтобы использовать пример из hginit.com , скажем, рецепт "гуак" уже существует, и я хочу создать "супергуак", который содержит инструкции о том, как подавать гуакамоле 1000 любителям футбола. Используя процесс, который я только что описал, я мог бы:

svn cp guac superguac
svn ci -m "Created superguac by copying guac"
(edit superguac)
svn ci -m "Added instructions for serving 1000 raving soccer fans to superguac"
(edit guac)
svn ci -m "Fixed a typo in guac"
svn merge -r3:4 guac superguac

и, таким образом, исправление опечатки будет применено к супергуаку.

Mercurial предоставляет команду hg copy, которая помечает файл как копию оригинала, но я не уверен, что структура хранилища поддерживает аналогичный рабочий процесс. Вот тот же пример, и я тщательно редактирую только один файл в коммите, который я хочу использовать при слиянии:

hg cp guac superguac
hg ci -m "Created superguac by copying guac"
(edit superguac)
hg ci -m "Added instructions for serving 1000 raving soccer fans to superguac"
(edit guac)
hg ci -m "Fixed a typo in guac"

Теперь я хочу применить изменение в guac к superguac. Это возможно? Если так, то какая команда? Есть ли другой рабочий процесс в Mercurial, который достигает тех же результатов (ограничен одной веткой)?

Ответы [ 2 ]

9 голосов
/ 24 апреля 2010

Нет чисто меркуриального способа кросс-файла с вашими патчами, но если в вашей системе установлено patch, вы можете достичь по сути того же самого, выполнив серию команд mercurial с помощью:

hg log -p -r tip -I quac | patch superquac

По сути, это означает: «возьмите diff (-p), который был применен к файлу quac (-I quac) в самом последнем наборе изменений (-r tip), отправьте его на стандартный вывод (hg log) и использовать ее в качестве входных данных для команды патча (| patch), действующей на файл superquac (superquac).

6 голосов
/ 26 апреля 2010

Вы можете сделать это с помощью

hg cp guac superguac
hg ci -m "Created superguac by copying guac" # CS1
(edit superguac)
hg ci -m "Added instructions for serving 1000 raving soccer fans to superguac" # CS2
hg up -r revision-before-copy
(edit guac)
hg ci -m "Fixed a typo in guac" #CS3
hg merge # this will transfer the typo-fix both to guac and superguac
hg ci -m "merged typo-fix from guac" # CS4

После этого репозиторий выглядит так

CS1 <--- CS2 <--------- CS4
  \                     /
   \--<-------- CS3 -<-/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...