Я знаю, що можу svn diff -r a:b repo
переглянути зміни між двома вказаними версіями. Що мені хотілося б - це різниця для кожної редакції, яка змінила файл. Чи доступна така команда?
Я знаю, що можу svn diff -r a:b repo
переглянути зміни між двома вказаними версіями. Що мені хотілося б - це різниця для кожної редакції, яка змінила файл. Чи доступна така команда?
Відповіді:
Для цього немає вбудованої команди, тому я зазвичай просто роблю щось подібне:
#!/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
. Це показує кожен запис журналу для файлу, а потім відповідний розл.
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
приємний маленький
Як це дивно називається команда "винуватий". Якщо ви використовуєте "Черепаха", він відкриє діалогове вікно "з перегляду", а потім список файлів із рядковим рядком за номером редакції та автором поруч.
Якщо ви клацніть правою кнопкою миші на інформацію про версію, ви можете відкрити діалогове вікно "Показати журнал", яке дає повну інформацію про реєстрацію, а також інші файли, що входили до складу реєстрації.
Наскільки я знаю, немає вбудованої команди svn для цього. Вам потрібно буде написати сценарій для запуску декількох команд для складання всіх розрізків. Більш простим підходом було б використання клієнтського GUI-клієнта, якщо це варіант. Багато з них, такі як підривний плагін для 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>
Щоб полегшити пошук, ви можете записати висновок у файл і вилучити те, що шукаєте.