Я знаю, что могу svn diff -r a:b repo
просматривать изменения между двумя указанными ревизиями. То, что я хотел бы, является diff для каждой ревизии, которая изменила файл. Доступна ли такая команда?
Я знаю, что могу svn diff -r a:b repo
просматривать изменения между двумя указанными ревизиями. То, что я хотел бы, является diff для каждой ревизии, которая изменила файл. Доступна ли такая команда?
Ответы:
Для него нет встроенной команды, поэтому обычно я делаю что-то вроде этого:
#!/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: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
работает именно так! stackoverflow.com/a/24938573/3185510
Немного отличается от того, что вы описали, но я думаю, что это может быть тем, что вам действительно нужно:
svn blame filename
Он напечатает файл с каждой строкой с префиксом, указанным временем и автором коммита, который последним изменил его.
Если вы хотите увидеть всю историю файла с изменениями кода:
svn log --diff [path_to_file] > log.txt
--diff
так как она имеет тесты для опции, а в 1.7.3 нет - subversion/tests/cmdline/log_tests.py
.
--limit <number>
возможностью. Вот так:svn log --diff --limit 5 [path_to_file]
Вы можете использовать git-svn
для импорта репозитория в Git-репозиторий, а затем использовать git log -p filename
. Здесь показана каждая запись в журнале для файла, за которой следует соответствующий diff.
git log X..Y -o filename
Начать с
svn log -q file | grep '^r' | cut -f1 -d' '
Это даст вам список ревизий, в которых файл был изменен, который вы затем сможете использовать для сценария повторных вызовов svn diff
.
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
хороший маленький однострочный (awk делает то же самое, что вырезать)
Это делает команда со странным названием «вина». Если вы используете Черепаху, она дает вам диалоговое окно «от редакции», затем список файлов с построчным индикатором номера редакции и автора рядом с ним.
Если щелкнуть правой кнопкой мыши информацию о ревизии, вы можете вызвать диалоговое окно «Показать журнал», в котором содержится полная информация о регистрации, а также другие файлы, которые были частью регистрации.
Насколько я знаю, нет встроенной команды SVN для этого. Вам нужно написать скрипт для запуска нескольких команд для построения всех различий. Более простой подход состоит в том, чтобы использовать svn-клиент с графическим интерфейсом, если это вариант. Многие из них, такие как подрывной плагин для 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=$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>
Чтобы упростить поиск, вы можете записать вывод в файл и выполнить поиск по запросу.