Рассмотрим это тривиальное репо:
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 и новый файл.
hg diff -r2:3
показывает новый файл2. То же самое для hg log -p -r3
и hg st --change 3
, потому что 2 является первым родителем.
Мой вопрос: как я могу увидеть изменения между 1 и 3 минус изменения в 2, что концептуально d(1:3) - d(0:2)
?
Я ожидаю увидеть только изменение файла1. hg log -r3 -v
показывает только "files: file1" (я думаю, потому что это единственный файл в смене ctx), но с любопытством, hg log -r3 --debug
также показывает "файлы +: файл2".
Если я запустил hg view
(предоставленный связанным расширением hgk
) и нажав на r3, он отобразит только файл1. Я не могу прочитать код tcl/tk, но кажется, что трюк находится в функции contmergediff
, где он получает список файлов в слиянии, в котором он каким-то образом пропускает файл2.
FWIW, TortoiseHg отличается от всего вышеперечисленного: нажатие на r3 показывает "M file1" и "A file2" в списке файлов, но не показывает фактических изменений в файле1. Нажмите "Другой родитель", чтобы отобразить "M file1" и "A file3", что совпадает с "diff -r1: 3".
Случай использования в реальном мире таков: r1 мой, а r2 - коллега. Ранее коллега рассмотрел r1 (diff 0: 1), но он не объединил его, прежде чем запрашивать обзор r2. Поэтому я просмотрел r2 (diff 0: 2), а позже он сделал слияние. Затем, когда я вижу diff 1: 3, я должен забыть о том, что я когда-либо рассматривал r2. Если diff слияния невелик, я могу просто использовать hgk. Но если он большой, мне действительно нужно увидеть его в vdiff.
(ОБНОВЛЕНИЕ) Теперь существует расширение mergediff. Если кто-то попытается найти работу, добавьте ответ.