Рассмотрим этот тривиальный репо:
mkdir temp
cd temp
hg init
echo abc > file1
hg ci -A -m init
echo def >> file1
echo hey > file2
hg ci -A -m A
hg up -r0
echo ghi >> file1
echo hey > file3
hg ci -A -m B
hg merge
hg ci -m merge
Во время слияния принимайте "ghi" (не имеет значения, с какой стороны).
DAG:
0 - 2 - 3
\- 1 -/
hg diff -r1:3
показывает изменение файла1 и новый файл3.
hg diff -r2:3
показывает новый файл2. То же самое для hg log -p -r3
и hg st --change 3
, потому что 2 является первым родителем.
Мой вопрос: как я могу увидеть изменения между 1 и 3 минус изменения в 2 , что концептуально d(1:3) - d(0:2)
?
Я ожидаю увидеть только изменение file1. hg log -r3 -v
показывает только «files: file1» (я думаю, потому что это единственный файл в ctx изменения), но, что любопытно, hg log -r3 --debug
также показывает «files +: file2».
Если я запускаю hg view
(предоставленный включенным расширением hgk
) и нажимаю на r3, он показывает только file1. Я не могу прочитать код tcl / tk, но похоже, что хитрость заключается в функции contmergediff
, где он получает список файлов в слиянии, в котором он каким-то образом пропускает file2.
FWIW, TortoiseHg отличается от всего вышеперечисленного: нажатие на r3 показывает «M file1» и «A file2» в списке файлов, но не показывает фактических изменений в file1. Нажмите «Другой родитель», чтобы отобразить «M file1» и «A file3», что совпадает с «diff -r1: 3».
Пример использования в реальном мире таков: r1 - мой, а r2 - коллега. Ранее коллега рассмотрел r1 (разница 0: 1), но он не объединил его, прежде чем просить пересмотреть r2. Поэтому я пересмотрел r2 (разность 0: 2), и позже он сделал слияние. Затем, когда я вижу разницу 1: 3, я должен забыть о том, что я когда-либо пересматривал r2. Если слияние различий мало, я могу просто использовать HGK. Но если он большой, мне действительно нужно увидеть его в vdiff.
(ОБНОВЛЕНИЕ) Теперь есть расширение слияния . Если кто-то попытается сработать, добавьте ответ.