Как просмотреть все исторические изменения в файле в SVN

Я знаю, что я могу svn diff -r a:b repo просматривать изменения между двумя указанными ревизиями. Я бы хотел, чтобы для каждой ревизии был изменен diff, который изменил файл. Доступна ли такая команда?

Ответ 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