Чи можна побачити історію змін до певного рядка коду у сховищі Subversion?
Я хотів би, наприклад, мати можливість бачити, коли було додано певне твердження або коли це твердження було змінено, навіть якщо номер його рядка вже не однаковий.
Відповіді:
Я не знаю методу відстеження висловлювань у часі в Subversion.
Однак просто побачити, коли будь-який конкретний рядок у файлі востаннє змінювався за допомогою svn blame
. Перевірте SVNBook: svn blame
посилання :
Конспект
svn blame TARGET[@REV]...
Опис
Показати інформацію про автора та редакцію в рядку для вказаних файлів або URL-адрес. Кожен рядок тексту на початку коментується автором (ім'я користувача) та номером редакції останньої зміни цього рядка.
У клієнті TortoiseSVN є дуже приємна функція, яка дозволяє:
Друга функція виконує те, що сказано - вона показує анотовану редакцію, що передувала останній зміні рядка. Повторно використовуючи цю функцію, ви можете прослідкувати історію певного рядка.
Я зазвичай:
svn blame FILE
спочатку.Зробіть ще один запит з -r
аргументом:
svn blame FILE -r 1:REV
svn annotate $file_path | head -n$line_no | tail -1 | awk '{print $1}'
Це можна зробити в два етапи:
svn blame /path/to/your/file > blame.tmp
grep "your_line_of_text" blame.tmp
Потім ви можете видалити файл .tmp, якщо він вам не потрібен.
В принципі, простий сценарій може бути написаний будь-якою мовою сценаріїв, яка виконує приблизно те саме.
Ключовим тут є те, скільки потрібно історії. Як зазначали інші, коротка відповідь така: svn blame
(дивsvn help blame
Докладніше). Якщо ви сягаєте далеко в історію або маєте справу зі значними змінами, вам, ймовірно, знадобиться не лише ця одна команда.
Мені просто довелося це зробити самому, і я знайшов цю (ви оле) нитку тут на SO. Ось що я зробив, щоб вирішити це лише CLI
, особливо для мого випадку, коли API змінився (наприклад, під час перенесення чиєїсь застарілої роботи (не на гілці, arrgh! ) Назад у гілку функції, засновану на останніх версіях стовбур дати). Наприклад, імена функцій досить змінилися, де не було очевидно, яку функцію потрібно викликати.
Наступна команда дозволила мені переглядати коміти, де щось змінилося у файлі "fileName.h", і бачити відповідний номер редакції (примітка: можливо, вам доведеться змінити "10" для більш-менш контексту відповідно до вашого тексту журналу svn ).
svn log | grep -C 10 "fileName.h" | less
У результаті з’являється список версій, у яких цей файл було змінено.
Тоді справа була простою у використанні blame
(або, як зазначали інші annotate
), для звуження до перегляду інтересів.
cd trunk
svn blame fileName.h@r35948 | less
Наприклад, встановлено, що перегляд відсотків становив 35948.
Визначивши перегляд (и), що представляє інтерес, через звинувачення, можна створити різницю для використання інструмента SVN.
svn diff -r35948:PREV fileName.h
Наявність візуальної різниці значно полегшило ідентифікацію старих імен API з новими / оновленими іменами API.
grep
використати старе ім'я API / функції та знайти коментар, що говорить щось на зразок " змінено func_FindParm на func_GetParm " .
svn annotate
Вину AKA SVN від TortoiseSVN .
svn kriv показує, яка реєстрація змінила будь-який рядок у файлі востаннє.
Це працює і на старих версіях.
Початок - це команда svn вини (або анотування, похвала). Він покаже вам, коли рядок коду востаннє був змінений і ким він був змінений. наприклад:
4564 wiemann # $Id$
4564 wiemann # Author: David Goodger <goodger@python.org>
778 goodger # Copyright: This module has been placed in the public domain.
217 goodger
Якщо ви використовуєте Emacs, це vc
може зробити вбудований пакет .
vc-annotate
за допомогою M-x vc-annotate
абоC-xvg .svn blame
.vc-annotate-revision-previous-to-line
) призведе до перегляду перед редакцією на рядку, на якому ви знаходитесь.Команда, яку ви шукаєте, - це svn blame
.