LINUX.ORG.RU

svn diff для непоследовательных коммитов

 ,


0

2

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

svn diff -r 1201:1202 svn.test.com/svn/big_project/little_subproject/ --diff-cmd meld

или

svn diff -c 1202 svn.test.com/svn/big_project/little_subproject/ --diff-cmd meld

Но если задать несколько ревизий с -c или несколько пар с -r, получаю ошибку:

svn: E205000: Multiple revision arguments encountered; can't specify -c twice, or both -c and -r

Вариант вида svn diff -r 1201:1212 не устраивает – между 1202 и 1212 коммитили много, и интересующие строки затеряются.

Существует ли простой общепринятый способ посмотреть изменения сразу нескольких коммитов? Пока не придумал ничего лучше, чем вручную собирать список изменённых файлов, делать для каждого дифф для каждой ревизии, применять их к новейшей ревизии и сравнивать.

★★

Существует ли простой

Нет.

общепринятый способ

В TortoiseSVN такое есть из коробки - выделяешь отдельные нужные ревизии и гуй сам считает diff. Но он может быть конфликтным из-за упущения промежуточных ревизий.

Обычно для этого создают отдельный временный бранч и накатывают нужные ревизии. Если реп локальный, операция довольно дешёвая. Либо так, как уже делаешь ты с локальной копией. Но см. выше про конфликты.

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

E ★★★ ()
Ответ на: комментарий от E

У меня в отдельно ветки содержатся только мои коммиты. При выполнении diff с указанным диапазоном, в результирующий файл попадают все изменения в этом диапазоне, включай и из транска. Что надо сделать, чтобы увидеть изменения только в выбранной ветке?

anonymous ()
Ответ на: комментарий от anonymous

Сложно сказать, не видя конкретной ситуации.

  • Проверь, что в log для конкретной директории показаны только коммиты из этой ветки.
  • Проверь то же самое для remote url. Может быть, что-то не в порядке с локальной копией.
  • Если твоя ветка создавалась из другой копированием, сними галку «Stop on copy/rename» в гуе или запусти svn log --stop-on-copy
  • Если ничего не поможет, попробуй биекцией определить, какая ревизия портит diff.
E ★★★ ()
Последнее исправление: E (всего исправлений: 1)
Ответ на: комментарий от anonymous

Именно так и делал, в патч попадали все ревизии из указанного интервала, в том числе и из транка.

Не пробовал явно указывать все имена файлов с путями? Или их слишком много?

olegd ★★ ()