Подтвердить что ты не робот

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

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

# 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 но только имена файлов вместо целого diff.

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


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

Ответ 1

hg diff -r 182 -r 193 --stat

или

hg status --rev 182:193

Ответ 2

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

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

$ hg status

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

$ hg status --rev AA:BB

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

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

Ответ 3

Решение одно. 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(-)

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

Решение два. Log + templating + 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

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

Ответ 4

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


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

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

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

enter image description here

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

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


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

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

enter image description here

  • Нажмите ОК
  • Затем обязательно добавьте инструмент "filecomp" хотя бы в одно из расположений графического интерфейса в раскрывающемся списке.
  • Перезапустить ГТГ

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

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

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

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

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


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

hg stat --rev A --rev B

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

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

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