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

98

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

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

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

Маркус Леон
источник

Ответы:

150

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

hg status --change REV
pyfunc
источник
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
источник
Это связано с вопросом. Плакат спросил, как получить файлы в наборе изменений. Наборы изменений часто связаны с билетами. Мое решение показывает, как получить файлы, связанные с наборами изменений, связанными с билетом.
iDimensionz