Как я могу увидеть свое место в истории во время конфликта «hg rebase»? - PullRequest
2 голосов
/ 25 апреля 2019

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

      o  12
      |
      o  11
      |
10 o  |  
    \ /
     o  9

Выполнение hg rebase -s 11 -d 10 может привести к конфликту при попытке применить 11 или 12. Трудно определить это сразу из конфликта слияния, где яя остановлен, особенно когда график больше, чем этот.Как я могу определить, где в процессе ребазирования конфликт?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

У самых последних Mercurials есть два варианта конфигурации: [ui] mergemarkertemplate и [ui] pre-merge-tool-output-template, которые можно использовать для улучшения ситуации.

pre-merge-tool-output-template

pre-merge-tool-output-template isпечатается перед запуском любого внешнего инструмента слияния.Это может быть использовано для печати чего-либо до того, как появится ваш редактор или kdiff3;обратите внимание, что если вы используете инструмент слияния на основе терминала (например, большинство редакторов, если они не являются версией графического интерфейса пользователя), он, вероятно, будет скрыт инструментом слияния.В зависимости от операционной системы и используемой программы вы можете нажать Ctrl-Z, чтобы приостановить работу инструмента слияния, чтобы увидеть этот вывод.

Пример вывода:

merging path/to/file

Running merge tool for path/to/file (/usr/bin/vim):
- local (working copy): 10:2d1f533d add binary file (#2) tip default
-          base (base): 6:abcd1234 some other description default
-    other (merge rev): 9:1e7ad7d7 add binary file (#1) default
... vim runs here ...

См. https://www.mercurial -scm.org / repo / hg / file / 14589f1989e9 / tests / test-merge-tools.t # l1956 для шаблона, создавшего этот вывод, hg help config.ui.pre-merge-tool-output-template и hg help templates для получения дополнительной информациина этом.

mergemarkertemplate

mergemarkertemplate контролирует маркеры конфликта, которые вы видите в вашем редакторе.Установите [ui] mergemarkers=detailed и посмотрите, достаточно ли этого;если нет, вы можете использовать [ui] mergemarkertemplate для его настройки;это также может быть настроено для каждого инструмента слияния, поэтому смотрите hg help config.ui.mergemarkers, hg help config.ui.mergemarkertemplate и hg help config.merge-tools.

Программы с настраиваемыми метками

Инструменты слияния, такие как kdiff3 часто имеют возможность настраивать метки.В конфигурации по умолчанию это должно быть имя, предоставленное операцией для base / local / other (в моем примере выше, это было бы base, working copy и merge rev соответственно. Я полагаю, если у вас есть [ui] mergemarkers=detailed или [merge-tools] kdiff3.mergemarkers=detailed, они будут включать дополнительную информацию. См. hg help config.merge-tools для получения дополнительной информации о параметрах конфигурации для каждого инструмента слияния.

0 голосов
/ 26 апреля 2019

(Точно не ответ, но немного долго для комментария ...)

Когда вы пишете:

Выполнение hg rebase -s 11 -d 10 маяесть конфликт, пытающийся применить либо 10, либо 11.

Вы хотите написать

может возникнуть конфликт, пытающийся применить либо 11, либо 12

?Поскольку вы пытаетесь уменьшить эти наборы до 10, поэтому нет смысла говорить о применении 10. Кроме того, рассмотрите возможность использования расширения Evolve, если вы этого еще не сделали.Это делает все только для добавления, что намного лучше.

Кроме того, тестируйте в клоне.А также, попробуйте сначала перебазировать 12, если это возможно.Во всяком случае, Mercurial просто пытается отменить изменения от 11 до 12, и я не думаю, что они различают эти изменения.И с чего бы это ожидать?Разве вам не очевидно, какие изменения принадлежат какому cset?

Кроме того, рассмотрите возможность настройки параметров слияния для использования с kdiff3, если вы этого еще не сделали.В редакторе слияний становится намного понятнее, и вы также можете четко видеть обе стороны слияния.См. https://www.mercurial -scm.org / wiki / MergeToolConfiguration и https://www.mercurial -scm.org / wiki / KDiff3

Лично у меня есть следующие строки вмои ~/.hgrc, но они были там давно, и я не помню, откуда я их взял.Кроме того, я не делаю много слияний в эти дни.Но что бы это ни стоило ...

[merge-tools]
kdiff3.args=--auto --L1 base --L2 local --L3 other $base $local $other -o $output
kdiff3.regkey=Software\KDiff3
kdiff3.regappend=\kdiff3.exe
kdiff3.fixeol=True
kdiff3.gui=True
kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child

Надеюсь, это поможет.

...