История изменений в конкретной строке кода в Subversion
Можно ли просмотреть историю изменений в конкретной строке кода в репозитории Subversion?
Я хотел бы, например, иметь возможность видеть, когда был добавлен конкретный оператор или когда этот оператор был изменен, даже если его номер строки больше не совпадает.
Ответы
Ответ 1
Я не знаю метода отслеживания высказываний через время в Subversion.
Однако, просто, чтобы увидеть, когда какая-либо конкретная строка в файле была в последний раз изменена с помощью svn blame
. Проверьте SVNBook: svn blame
ссылка:
Сводка
svn blame TARGET[@REV]...
Описание
Показывать информацию об авторе и ревизии в строке для указанных файлов или URL-адресов. Каждая строка текста аннотируется в начале с автором (имя пользователя) и номером ревизии для последнего изменения этой строки.
Ответ 2
В TortoiseSVN есть очень приятная функция, которая позволяет:
- винить файл, отображая последнее изменение для каждой строки (это стандартно)
- "винить предыдущую ревизию", после нажатия на определенную строку в приведенном выше представлении (это хорошо).
Вторая функция делает то, что она говорит - она показывает аннотированную ревизию, предшествующую последней модификации строки. Используя эту функцию итеративно, вы можете проследить историю истории определенной строки.
Ответ 3
Я обычно:
Ответ 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
может сделать это.
- Перейдите к рассматриваемому файлу.
- Запустите команду
vc-annotate
с помощью M-x vc-annotate
или C-x v g.
- Каждая строка будет отображаться со своей ревизией, как обычный
svn blame
.
- Нажатие a (
vc-annotate-revision-previous-to-line
) переместится к ревизии до ревизии в строке, на которой вы находитесь.
Ответ 11
Команда, которую вы ищете, svn blame
.