Создание списка файлов, измененных между версиями hg

118

Я хочу создать список файлов, которые были изменены между двумя ревизиями в заданном каталоге в Mercurial.

В частности, меня не интересует, что изменилось, а какие файлы были изменены в этом каталоге.

Например, предположим, что между thenи otherthenизменились только 2 файла:

>hg hypothetical-command -r then:otherthen
foo.baz
bar.baz
>

Что за гипотетическая команда? Я пробовал diff и log, но не вижу, как убедить их сделать это: либо я получаю патч (diff), либо получаю все репо (log).

Пол Натан
источник

Ответы:

166
hg status --rev x:y

где xи y- желаемые номера ревизий (или названия тегов или веток).

Если вы используете терминал в Windows, добавьте, hg status --rev x:y> your-file.txtчтобы сохранить список в файл.

alemjerus
источник
3
Чтобы увидеть изменения только в текущем каталоге:hg status --rev x:y .
Пользователь
14
Чтобы увидеть изменения в последней ревизии: hg status --rev .^
kunigami
8
Чтобы получить только список имён файлов (без префикса, указывающего на тип изменения), добавьте -n, то естьhg status --rev x:y -n
Cheetah
1
hg status --change .перечисляет измененные файлы .- в том же списке, hg status --rev .^но более
точно
14

статус - это то, что вам нужно.

Но в зависимости от того, что вы подразумеваете под «между двумя ревизиями», вы также можете рассмотреть возможность использования диапазона « x :: y » (DAG - Directed Acyclic Graph).

Учитывая параллельные наборы изменений,

1--2---4 \---3

hg status --rev 1:4 вернет (1,2,3,4), т. е. все, что находится между конечными точками и включая их, в соответствии с локальным числовым значением rev . Это может (и, скорее всего, будет) возвращать разные результаты в других, хотя и связанных, репозиториях!

hg status --rev 1::4вернет (1,2,4), то есть конечные точки и все ревизии, которые являются потомками «1» И предками «4».

Последний случай, x :: y, обычно более полезен в реальных приложениях. Это то, что вы получаете через TortoiseHg \ Visual Diff.


> hg help revsets:

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

martind2112
источник
1
Возможно, вам нужно явно включить команду, чтобы ваш ответ не зависел от другого и был более надежным. Что-то вроде «Да, статус - это то, что тебе нужно. Например hg status --rev x::y».
PhoneixS