Как вы видите последние записи журнала SVN?


194

Набор текста svn logвыдает невероятно длинный, бесполезный список в командной строке. Я понятия не имею, почему это по умолчанию. Если бы я хотел прочитать (или даже мог прочитать) 300 записей на терминале, я бы не стал печатать svn log --fullили что-то подобное.

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

Во всяком случае, как я могу увидеть только некоторые последние действия, такие как последние 5 или 10 записей, чтобы увидеть, что изменилось?


9
Да, это действительно должно работать как git log...
Пол Дрэйпер

Ответы:


262

limit вариант, например:

svn log --limit 4

svn log -l 4

Только последние 4 записи


127

Помимо того, что сказал Берт Ф. , многие команды, в том числе, logимеют -r(или --revision) опцию. Ниже приведены некоторые практические примеры использования этой опции для отображения диапазонов ревизий:

Чтобы перечислить все в порядке возрастания:

svn log -r 1:HEAD

Чтобы перечислить все в порядке убывания:

svn log -r HEAD:1

Чтобы перечислить все, начиная с тринадцатого до основания текущей проверенной ревизии в порядке возрастания:

svn log -r 13:BASE

Чтобы получить все между указанными датами:

svn log -r {2011-02-02}:{2011-02-03}

Вы можете комбинировать все вышеперечисленные выражения с --limitопцией, так что вы можете иметь достаточно детальный контроль над тем, что печатается. Для получения дополнительной информации об этих -rвыражениях обратитесь к svn help logсоответствующей главе книги « Контроль версий с Subversion».


8
Большое спасибо за это объяснение, @Daniel Dinnyes - у меня часто возникает проблема, противоположная OP: svn log .могу вернуть только самую раннюю ревизию для меня (аналогично с svn log --limit 4 .); но если я позвоню svn log -r HEAD:1 ., то наконец получу все записи в списке ... Еще раз спасибо - ура!
sdaau

Это лучше, так как svn log показывает только историю изменений текущего пути.
Ниндзя

41

Мне нравится использовать -vдля подробного режима.
Он даст вам идентификатор коммита, комментарии и все затронутые файлы.

svn log -v --limit 4

Пример вывода:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

2
Подробный вариант чрезвычайно полезен
Джейсон Джордж

И если команда разработчиков действительно хороша, они помещают идентификатор проблемы в комментарий svn, и вы можете легко найти проблему, связанную с фиксацией.
Йонас Сёдерстрем

11

Передайте вывод через lessдругой пейджер:

svn log | less

1
Если у вас> 23k ревизий, вы все равно будете ждать ~ 20 секунд, чтобы увидеть первые записи (и если не использовать подробный журнал). Но это приятно - показывает самые последние наверху. И лучше, чем 100-страничный пейджинг TortoiseSVN! Когда хочешь идти дальше назад.
Томаш Гандор

6

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

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (спасибо Гэри за комментарий)
тоже самое, но гораздо короче и логичнее:

svn log -r BASE:HEAD -v


8
или простоsvn log -r BASE:HEAD -v
Гари

5

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

alias svnlog='svn log -l 30 | less'

или что вы хотите по умолчанию


4

Как вы уже заметили, svn logкоманда, запущенная без каких-либо аргументов, отображает все сообщения журнала, которые относятся к указанному вами URL-адресу или к папке с рабочей копией, в которой вы выполняете команду.

Вы всегда можете уточнить / ограничить svn logрезультаты:

  • svn log --limit NUM покажет только первый номер ревизий,
  • svn log --revision REV1(:REV2) покажет сообщение журнала для версии REV1 или для диапазона REV1 - REV2,
  • svn log --searchпокажет ревизии, которые соответствуют указанному вами шаблону поиска (команда доступна в Subversion 1.8 и более новом клиенте). Вы можете искать по
    • автор ревизии (т.е. имя пользователя коммиттера),
    • дата, когда была произведена проверка,
    • текст комментария ревизии (сообщение журнала),
    • список путей изменен в ревизии.

4

Этот ответ направлен на дальнейшие вопросы, касающиеся параметров подкоманд Subversion. Для каждой доступной подкоманды (т. Е. Add, log, status ...) вы можете просто добавить --helpопцию, чтобы отобразить полный список доступных опций, которые вы можете использовать с вашей подкомандой, а также примеры их использования. Следующий фрагмент взят непосредственно из svn log --helpвывода команды в разделе «examples»:

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v

3

Но svn log по-прежнему в обратном порядке, т.е. самые последние записи выводятся первыми, прокручиваются с вершины моего терминала и исчезают. Я действительно хочу увидеть последние записи, то есть порядок сортировки должен быть хронологическим. Кажется, единственная команда, которая делает это, svn log -r 1:HEADно это занимает слишком много времени в репозитории с примерно 10000 записями. Я придумал это это:

Показать последние 10 записей Subversion в хронологическом порядке:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.