История изменений в конкретной строке кода в Subversion

Можно ли просмотреть историю изменений в конкретной строке кода в репозитории Subversion?

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

Ответ 1

Я не знаю метода отслеживания высказываний через время в Subversion.

Однако, просто, чтобы увидеть, когда какая-либо конкретная строка в файле была в последний раз изменена с помощью svn blame. Проверьте SVNBook: svn blame ссылка:

Сводка

svn blame TARGET[@REV]...

Описание

Показывать информацию об авторе и ревизии в строке для указанных файлов или URL-адресов. Каждая строка текста аннотируется в начале с автором (имя пользователя) и номером ревизии для последнего изменения этой строки.

Ответ 2

В TortoiseSVN есть очень приятная функция, которая позволяет:

  • винить файл, отображая последнее изменение для каждой строки (это стандартно)
  • "винить предыдущую ревизию", после нажатия на определенную строку в приведенном выше представлении (это хорошо).

Вторая функция делает то, что она говорит - она ​​показывает аннотированную ревизию, предшествующую последней модификации строки. Используя эту функцию итеративно, вы можете проследить историю истории определенной строки.

Ответ 3

Я обычно:

  • Сначала запустите svn blame FILE.
  • Обратите внимание на последнюю ревизию конкретной строки.
  • Сделайте еще один запрос с аргументом -r:

    svn blame FILE -r 1:REV
    
  • Отслеживать вручную оттуда.

Ответ 4

Это можно сделать в два этапа:

  • svn blame /path/to/your/file > blame.tmp
  • grep "your_line_of_text" blame.tmp

После этого вы можете удалить файл blame.tmp, если он вам не нужен.

В принципе, простой script может быть написан на любом языке сценариев, который делает примерно то же самое.

Ответ 5

В Eclipse вы можете узнать, когда каждая строка вашего кода была зафиксирована с использованием аннотатного представления SVN, или щелкните правой кнопкой мыши по файл → Команда → Показать аннотацию....

Ответ 6

Ключевым моментом здесь является то, сколько требуется истории. Как указывали другие, короткий ответ: svn blame (подробнее см. svn help blame). Если вы заходите далеко назад в историю или имеете дело со значительными изменениями, вам, скорее всего, понадобится не только эта команда.

Я просто должен был сделать это сам, и нашел эту (вы оле) нить здесь, на SO. Вот что я сделал, чтобы решить его только с помощью CLI, особенно для моего случая, когда API был изменен (например, при переносе какой-то далеко устаревшей работы (а не на ветку, arrgh!) Обратно в ветвь функции, основанную на -тонный багажник). Например. имена функций были изменены настолько, что не было видно, какую функцию нужно вызывать.

Шаг первый

Следующая команда разрешила мне перехватывать страницы, где вещи изменились в файле "fileName.h" и увидеть соответствующий номер версии (обратите внимание: вам может потребоваться изменить "10" для более или менее контекста на ваш svn log text).

svn log | grep -C 10 "fileName.h" | less

Это приводит к списку изменений, в которых этот файл был изменен.

Шаг второй

Тогда было просто использовать blame (или, как указывали другие, annotate), чтобы сузить до пересмотра интереса.

cd trunk
svn blame [email protected] | less

например. найденный пересмотр процентов составил 35948.

Шаг третий

Найдя интересующую вас ревизию через вину, можно использовать diff для использования инструмента SVN.

svn diff -r35948:PREV fileName.h

Заключение

Наличие визуального отличия упростило идентификацию старых имен API с новыми/обновленными именами API.

Ответ 7

svn annotate

Ошибка AKA SVN от TortoiseSVN.

Ответ 8

svn blame показывает вам, какой checkin модифицировал любую строку в файле в последний раз.

Это также относится к старым версиям.

Ответ 9

Начало - это команда svn винить (или аннотировать, хвалить). Он покажет вам, когда была изменена строка кода и кем она была изменена. например:.

  4564    wiemann # $Id$
  4564    wiemann # Author: David Goodger <[email protected]>
   778    goodger # Copyright: This module has been placed in the public domain.
   217    goodger 

Ответ 10

Если вы используете Emacs, встроенный пакет vc может сделать это.

  1. Перейдите к рассматриваемому файлу.
  2. Запустите команду vc-annotate с помощью M-x vc-annotate или C-x v g.
  3. Каждая строка будет отображаться со своей ревизией, как обычный svn blame.
  4. Нажатие a (vc-annotate-revision-previous-to-line) переместится к ревизии до ревизии в строке, на которой вы находитесь.

Ответ 11

Команда, которую вы ищете, svn blame.