В чем разница между: и:: и% операторов mercurial revsets

Revsets поможет упомянуть

"x::y" Диапазон DAG, означающий все наборы изменений, которые являются потомками x и предками y, включая сами x и y. Если первая конечная точка не указана, это эквивалентно "ancestors(y)", если вторая не указана, она эквивалентна "потомкам (x)". Альтернативный синтаксис "x..y".

"x: y" Все наборы изменений с номерами ревизий от x до y, включая оба. Любая конечная точка может быть пропущена, по умолчанию они равны 0 и дают чаевые.

"x% y" Наборы изменений, которые являются предками x, но не предками y (то есть::x -::y). Это сокращенное обозначение "only(x, y)" (см. Ниже). Второй аргумент является необязательным и, если его опустить, эквивалентен "only(x)".

Не ясно, какие результаты дифференцированы. В общем, "x % y" возвращает то, что я хочу выбрать, но я хочу понять других.

1 ответ

Разница между утверждениями может быть очень тонкой, есть "между" и "диапазоном"

возьмите, например, заказанную линейную ревизию от 1 до 5 (в новом фиктивном репо), затем обратите внимание на разницу между 1:55:11::55::1

5:1 дает так же, как 1:5все между двумя, независимо от того, кто идет первым

Отон 5::1 не дает никаких ревизий вообще, так как их порядок инвертирован, поэтому предки / потомки 1::5 в этом примере даст так же, как 1:5

$ hg init tmptrial
$ cd tmptrial
$ echo 0 > file.txt
$ hg add file.txt
$ hg commit -m 'r0'
$ for i in {1..5} ; do echo $i > file.txt ; hg commit -m r$i ; done
$ hg log -r 1::5 --template "{desc}\n"
$ for range in 1::5 5::1 1:5 5:1 ; do echo -- $range -- ; hg log -r $range --template "{desc}\n" ; done

запустите приведенный выше пример и обратите внимание на пустой вывод 5::1

Другие вопросы по тегам