Как я могу просмотреть все исторические изменения файла в SVN
Я знаю что могу svn diff -r a:b repo
чтобы просмотреть изменения между двумя указанными ревизиями. То, что я хотел бы, является diff для каждой ревизии, которая изменила файл. Доступна ли такая команда?
9 ответов
Для него нет встроенной команды, поэтому обычно я делаю что-то вроде этого:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Затем вы можете позвонить с помощью:
history_of_file $1
Немного отличается от того, что вы описали, но я думаю, что это может быть тем, что вам действительно нужно:
svn blame filename
Он напечатает файл с каждой строкой с префиксом, указанным временем и автором коммита, который последним изменил его.
Если вы хотите увидеть всю историю файла с изменениями кода:
svn log --diff [path_to_file] > log.txt
Вы могли бы использовать git-svn
чтобы импортировать репозиторий в репозиторий Git, затем используйте git log -p filename
, Здесь показана каждая запись в журнале для файла, за которой следует соответствующий diff.
Начать с
svn log -q file | grep '^r' | cut -f1 -d' '
Это даст вам список ревизий, в которых файл был изменен, который вы затем сможете использовать для сценария повторных вызовов svn diff
,
Это делает команда со странным названием "вина". Если вы используете Черепаху, она дает вам диалоговое окно "от редакции", а затем список файлов с построчным индикатором номера редакции и автора рядом с ним.
Если щелкнуть правой кнопкой мыши информацию о ревизии, вы можете вызвать диалоговое окно "Показать журнал", в котором содержится полная информация о регистрации, а также другие файлы, которые были частью регистрации.
Насколько я знаю, нет встроенной команды SVN для этого. Вам нужно написать скрипт для запуска нескольких команд для построения всех различий. Более простой подход состоит в том, чтобы использовать svn-клиент с графическим интерфейсом, если это вариант. Многие из них, такие как подрывной плагин для Eclipse, будут перечислять историю файла, а также позволят вам просматривать различия каждой ревизии.
Спасибо, Бендин. Мне очень нравится ваше решение.
Я изменил его, чтобы он работал в обратном порядке, сначала показывая самые последние изменения. Что важно с давним кодом, поддерживаемым в течение нескольких лет. Я обычно делаю это на большее.
svnhistory elements.py |more
Я добавил -r в сортировку. Я удалил спец. обработка для "первой записи". Это будет ошибка на последней записи, так как нет ничего, чтобы разобраться с этим. Хотя я живу с этим, потому что я никогда не спускаюсь так далеко.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackru.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
Я видел кучу частичных ответов при исследовании этой темы. Это то, что сработало для меня, и надеюсь, что это поможет другим. Эта команда отобразит вывод в командной строке, показывая номер редакции, автора, метку времени редакции и внесенные изменения:
svn blame -v <filename>
Чтобы упростить поиск, вы можете записать вывод в файл и выполнить поиск по запросу.