Mercurial - все файлы, которые были изменены в наборе изменений?


98

Как определить все файлы, которые были изменены в данном наборе изменений?

В данном случае я ищу не разницу, а просто список добавления / удаления / модификации.

hg log -vprX делает список различий, но мне просто нужны файлы.


Ответы:


150

Если вы хотите перечислить только файлы, которые были изменены, вам следует использовать «команду статуса». Ниже перечислены изменения в файлах в ревизии REV.

hg status --change REV

14
+1, но OP, вероятно, тоже хочет флаг -n/ --no-status.
Найл С.

7
Для удобства копирования:hg status --no-status --change REV
zastrowm 09

+1 Это намного проще печатать, чем то, hg status --rev REV~1:REVчто я делал раньше.
Patrick Oscity

3
используйте '.' для текущего REV. значение -hg status --change .
zaxy78

16

Просто удалите pиз своего hg log -vprсписка файлов. -pозначает показать патч. Вы также можете использовать шаблон для форматирования вывода на свой вкус.


3
Думаю, вам понадобится следующий шаблон: --template 'files: {files} \ n'
Ton Plomp

1
Я считаю, что {файлы} являются частью шаблона флага -v по умолчанию
eskhool 01

2
hg log -r. --template '{join (files, "\ n")}' для разделения файлов новой
строкой

1
Комментарий @Foxichu работал у меня, но был вроде как хакерским. на самом деле верхний ответ - hg status --change .работал лучше и давал префикс действия файла (A \ M \ D и т. д.) и лучший относительный путь
zaxy78

13

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

hg status --rev 1 --rev 10 -m

2
Ужасно плохо. Файлы, измененные в диапазоне, - это hg log -r BEGIN:END --template "{files}\n"как написали @ geoffrey-zheng и @ton два года назад !!!
Ленивый Барсук,

Извини за это. Предполагается, что их ответ был для единственного набора изменений.
Nick DeVore

1
На мой взгляд, это не так уж и страшно. hg status --rev BEGIN --rev ENDэто: 1. намного легче запомнить, чем hg log -r BEGIN:END --template "{files}\n"; 2. он печатает файлы отдельными строками без использования sed(@Eric Lawler) или join()(@Foxichu); 3. без -mфлажка отображаются не только измененные, но также добавленные и удаленные файлы (здесь также применяется красивая стандартная окраска); 4. есть флаги -aи, -rпозволяющие различную фильтрацию; 5. Если префикс статуса не нужен, есть -nопция, которая его подавляет.
Michał Wróbel

9

Текущая утвержденная редакция

hg status --change .

.это сокращение для текущей версии, как @HEADв Git

Текущая незафиксированная редакция

hg status

Произвольная внесенная ревизия

hg status --change REV_ID

1
самый простой и точный ответ!
zaxy78

2

Нашел этот вопрос через Google для аналогичной концепции. Чтобы показать все файлы, которые были изменены с помощью набора изменений, достаточно:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"покажет вам список каждого файла, измененного или добавленного в каждый набор изменений, от [start rev] до [end rev], с файлами каждого набора изменений в новой строке. Поменяйте местами {file_mods}{file_adds}на, {files}чтобы показать все файлы, измененные, добавленные или удаленные.
  2. sed -e 's/ /\n/g' разделит все файлы для отображения на отдельных строках и
  3. sort отсортирует список для вас, чтобы мы могли фильтровать список с помощью uniq
  4. uniq отфильтрует список для удаления дубликатов - файлов, которые были изменены более чем в одной редакции.

Это решение склеивает последнее измененное с первым добавленным файлом. Кроме того, он неправильно обрабатывает пробелы в именах файлов. Решение на --templateоснове A без этих недостатков может быть построено с использованием join()рекомендаций @Foxichu.
Michał Wróbel

1

Я знаю, что это старый вопрос, и я удивлен, что никто не предложил модифицированную кодовую форму OP. Я получил список измененных / добавленных / удаленных файлов (не помеченных, что есть что), просто запустив hg log -v. Или то, что мне действительно нужно, hg log -v -l5чтобы увидеть файлы, которые были изменены / добавлены / удалены в последних 5 коммитах (включая те, которые я еще не отправил в репо).


«никто просто не предложил модифицированную кодовую форму OP» - @Geoffrey Zheng сделал именно это примерно через 1 час после публикации вопроса
Michał Wróbel

-2

Если вы похожи на большинство магазинов, вы используете систему продажи билетов для отслеживания изменений. Если вы знаете номер билета и хотите найти все коммиты, связанные с этим билетом (при условии, что вы включили номер билета в сообщение фиксации), вы можете использовать:

hg log -k TICKET_NUMBER

Это отображает все изменения, связанные с заявкой. Однако он не перечисляет файлы. Вы можете использовать один из приведенных выше ответов, чтобы затем получить список файлов, связанных с версиями.

Чтобы упростить задачу, объединив информацию из предыдущих ответов, вы можете сделать следующее для поиска коммитов, включая измененные файлы:

hg log -vk TICKET_NUMBER

Это связано с вопросом. Плакат спросил, как получить файлы в наборе изменений. Наборы изменений часто связаны с билетами. Мое решение показывает, как получить файлы, связанные с наборами изменений, связанными с билетом.
iDimensionz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.