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

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

8 ответов


для этого нет встроенной команды, поэтому я обычно просто делаю что-то вроде этого:

#!/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= # 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 

немного отличается от того, что вы описали, но я думаю, что это может быть, что вам действительно нужно:

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.


странно названная команда "виноват" делает это. Если вы используете Tortoise, он дает вам диалог "от редакции", а затем список файлов с указанием номера редакции и автора рядом с ним.

Если вы щелкните правой кнопкой мыши на информации о ревизии, вы можете открыть диалог "показать журнал", который дает полную информацию о проверке, наряду с другими файлами, которые были частью проверки.


насколько я знаю, для этого нет встроенной команды svn. Вам нужно будет написать сценарий для запуска нескольких команд для создания всех различий. Более простым подходом было бы использовать клиент GUI svn, если это опция. Многие из них, такие как subversive plugin для Eclipse, будут отображать историю файла, а также позволяют просматривать различия каждой версии.


Спасибо, Бендин. Мне очень нравится ваше решение.

Я изменил его на работу в обратном порядке, сначала показав самые последние изменения. Что важно с долгосрочным кодом, поддерживаемым в течение нескольких лет. Обычно я добавляю еще.

svnhistory elements.py |more

я добавил -r к сортировке. Я удалил спецификации. обработка для "первой записи". Это будет ошибка на последней записи, так как нет ничего, чтобы отличить его. Хотя я живу с этим, потому что я никогда этого не забуду. далеко.

#!/bin/bash                                                                    

# history_of_file                                                              
#                                                                              
# Bendin on Stack Overflow: http://stackoverflow.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= # 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