Как я могу просмотреть все исторические изменения файла в SVN - PullRequest
164 голосов
/ 12 ноября 2008

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

Ответы [ 9 ]

177 голосов
/ 12 ноября 2008

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

#!/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
140 голосов
/ 12 ноября 2008

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

svn blame filename

Он распечатает файл с каждой строкой с префиксом, указанным временем и автором коммита, который его изменил последним.

84 голосов
/ 24 июля 2014

Если вы хотите просмотреть всю историю файла с изменениями кода:

svn log --diff [path_to_file] > log.txt
37 голосов
/ 12 ноября 2008

Вы можете использовать git-svn для импорта репозитория в Git-репозиторий, а затем использовать git log -p filename. Здесь показана каждая запись журнала для файла, за которой следует соответствующая разница.

20 голосов
/ 12 ноября 2008

Начните с

svn log -q file | grep '^r' | cut -f1 -d' '

Это даст вам список ревизий, в которых файл был изменен, который вы затем сможете использовать для сценария повторных вызовов svn diff.

8 голосов
/ 30 апреля 2012

Странно названная команда "обвинить" делает это. Если вы используете Черепаху, она дает вам диалоговое окно «от редакции», а затем список файлов с построчным индикатором номера редакции и автора рядом с ним.

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

3 голосов
/ 13 августа 2013

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

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

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=$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
3 голосов
/ 12 ноября 2008

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

0 голосов
/ 06 января 2019

Я видел кучу частичных ответов при исследовании этой темы. Это то, что сработало для меня, и надеюсь, что это поможет другим. Эта команда отображает вывод в командной строке, показывая номер редакции, автора, метку времени редакции и внесенные изменения:

svn blame -v <filename>

Чтобы упростить поиск, вы можете записать вывод в файл и выполнить поиск по запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...