Я знаю, что я могу svn diff -r a:b repo
просматривать изменения между двумя указанными ревизиями. Я бы хотел, чтобы для каждой ревизии был изменен diff, который изменил файл. Доступна ли такая команда?
Как просмотреть все исторические изменения в файле в SVN
Ответ 1
Там нет встроенной команды, поэтому я обычно делаю что-то вроде этого:
#!/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 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 [email protected]
svn cat -r$r [email protected]
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $u[email protected]
svn diff -c$r [email protected]
echo
done
}
}
Затем вы можете вызвать его с помощью:
history_of_file $1
Ответ 2
Немного отличается от того, что вы описали, но я думаю, что это может быть то, что вам действительно нужно:
svn blame filename
Он будет печатать файл с каждой строкой, предваряемой временем и автором фиксации, которая в последний раз его изменила.
Ответ 3
Если вы хотите просмотреть всю историю файла с изменениями кода:
svn log --diff [path_to_file] > log.txt
Ответ 4
Вы можете использовать git-svn
для импорта репозитория в репозиторий Git, затем используйте git log -p filename
. Это показывает каждую запись в журнале для файла, за которой следует соответствующий diff.
Ответ 5
Начните с
svn log -q file | grep '^r' | cut -f1 -d' '
Это даст вам список изменений, в которых файл был изменен, и затем вы можете использовать для script повторных вызовов svn diff
.
Ответ 6
Необычно названная команда "винить" делает это. Если вы используете Tortoise, он дает вам диалог "от ревизии", а затем список файлов с индикатором строки за строкой номера версии и автора рядом с ним.
Если вы щелкните правой кнопкой мыши на информации о ревизии, вы можете открыть диалоговое окно "Показать журнал", в котором содержится полная информация о регистрации, а также другие файлы, которые были частью проверки.
Ответ 7
Насколько я знаю, для выполнения этого не существует встроенной команды svn. Вам нужно будет написать script для запуска нескольких команд для создания всех различий. Более простой подход заключается в использовании клиента GUI svn, если это вариант. Многие из них, такие как подрывный плагин для Eclipse, будут перечислять историю файла, а также позволяют просматривать разницу каждой версии.
Ответ 8
Спасибо, Бендин. Мне очень нравится ваше решение.
Я изменил его, чтобы работать в обратном порядке, показывая самые последние изменения. Это важно при использовании долгого кода, который хранится в течение нескольких лет. Я обычно подключаю его к более.
svnhistory elements.py |more
Я добавил -r в сортировку. Я удалил spec. обработка "первой записи". Это будет ошибка в последней записи, так как нечего ее отличать. Хотя я живу с ним, потому что я никогда не спускаюсь так далеко.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/info/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 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 [email protected]
svn diff -c$r [email protected]
echo
done
}
}
history_of_file $1