Как получить список файлов, измененных между двумя произвольными наборами изменений? - PullRequest
14 голосов
/ 26 марта 2012

Мое единственное предположение - что-то ужасное:

# files where something has been added
hg diff -r AA -r BB|grep -- +++|cut -f1|cut -d/ -f2- >/tmp/ka

# files where something has been removed
hg diff -r AA -r BB|grep -- ---|cut -f1|cut -d/ -f2- >>/tmp/ka

# filtering out "dev/null": it appears when a file is added or removed from the repository
sort -u /tmp/ka |grep -v dev/null

Что мне нужно, так это файлы, измененные между набором изменений AA и BB набора изменений.Что-то вроде hg diff -r AA -r BB, но только имена файлов, а не целые различия.

Может быть, есть ртутная команда, которую я не заметил?Наборы изменений, которые я хочу исследовать, не являются последовательными, иначе я мог бы просто использовать hg status.


НЕ измененные файлы одной ревизии.
edit: мне нужно сделать это, потому что я работаю с некоторыми программистами из бронзового века, которые не понимают, что такое .diff, пожалуйста, потерпите меня ...

Ответы [ 4 ]

32 голосов
/ 26 марта 2012

hg diff -r 182 -r 193 --stat

или

hg status --rev 182:193

8 голосов
/ 26 марта 2012

Основная команда, которую нужно искать, когда вы хотите что-то узнать о состоянии файла, - hg status. Команда состояния - это команда имя файла , и вы хотите знать некоторые имена файлов.

Когда вы запускаете его как

$ hg status

затем сравнивает состояние рабочей копии с родительской версией рабочей копии (.). Но если вы запустите его как

$ hg status --rev AA:BB

тогда он покажет файлы, измененные между AA и BB! Нет необходимости разбирать, вырезать, сортировать или шаблоны.

(Я объяснил это раньше здесь , здесь и здесь , пожалуйста, посмотрите эти вопросы и ответы для получения дополнительных советов.)

0 голосов
/ 17 июля 2019

Вы можете сделать что-то похожее на hg stat в Tortoise Workbench .


Самый простой / наиболее встроенный способ - :

  • В основном списке ревизий, нажмите / выберите две, которые вы хотите сравнить
  • Щелкните правой кнопкой мыши один из них
  • В контекстном меню выберите «Visual Diff ...»

В результате появится окно, похожее на следующий пример:

enter image description here

(затем просто нажмите [X]).

Однако этот экран может иметь ограниченное использование ... например, вы не можете легко его экспортировать, кроме как сделать снимок экрана. Однако вы можете копировать / вставлять текст отдельных строк по очереди.


Альтернативный способ , обеспечивающий полезный вывод текста , заключается в автоматизации использования hg stat прямо из THG Workbench путем добавления пользовательского инструмента.

  • Меню Файл> Настройки
  • Вкладка глобальных настроек
  • Leftnav> Раздел инструментов
  • [Новый инструмент ...]
  • Введите детали, как показано на скриншоте:

enter image description here

  • Нажмите OK
  • Затем обязательно добавьте инструмент «filecomp» хотя бы в одно из расположений графического интерфейса в раскрывающемся списке
  • Перезапустить THG

Теперь, когда вы запустите этот инструмент, вы автоматически получите результаты на панели журнала. Вы можете выбрать один или несколько наборов изменений, и он будет сравнивать их соответственно.

Примечание - вы также можете настроить это в файле настроек, добавив:

[tortoisehg-tools]
filecomp.command = hg stat --rev {REVID}
filecomp.enable = istrue
filecomp.label = FILECOMP
filecomp.showoutput = True

Макрос {REVID} расширится до текста, например 33a6bd983eab, если вы выбрали один набор изменений в списке, или как 33a6bd983eab+a41898ae15c4, если вы выбрали два и т. Д.

В этом методе вы можете выбрать> 2 набора изменений , и он сообщит о комбинированных различиях между ними.


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

hg stat --rev A --rev B

, где A и B - идентификаторы изменений (которые выглядят как 1c845eefe22e).

(Вы также можете использовать номер редакции, например 12345, вместо идентификатора набора изменений, но имейте в виду, что это не постоянные значения в отличие от идентификаторов).

A и B могут находиться в любых двух ветвях или в одной и той же ветке, это не имеет значения, если они существуют в локальном клоне, с которым вы работаете.

0 голосов
/ 26 марта 2012

Решение первое. Diff на основе

>hg diff -r 3 -r 4 --stat
 comments.php  |  14 +++-----------
 functions.php |  15 +++++++++++++--
 header.php    |   2 +-
 readme.txt    |  17 ++++++++++++++---
 sidebar.php   |  43 ++++---------------------------------------
 style.css     |  18 ++++++++++++------
 6 files changed, 47 insertions(+), 62 deletions(-)

Вы можете получить измененные файлы, нажав на "|" char или (лучший и лучший подход из моего POV) вывод канала в gawk, который для записи с ровно 4 полями выводит $ 1

Решение второе. Журнал + шаблоны + revsets

>hg log -r "3::4" --template "{file_mods}\n"
footer.php functions.php header.php search.php style.css
comments.php functions.php header.php readme.txt sidebar.php style.css

конвертировать в список, удалять (возможные) дубликаты, которые я оставлю для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...