2011-02-02 58 views
168

鍵入svn log在命令行上吐出一個令人難以置信的漫長而無用的列表。我不知道爲什麼這是默認設置。如果我想閱讀(甚至可以閱讀)終端上的300個條目,我不介意鍵入svn log --full或類似的東西。您如何看到最近的SVN日誌條目?

也許SVN傢伙想我想將該輸出提供給另一個程序。但是,如果是這種情況,那麼對程序進行更詳細的調用會更有意義 - 而不是終端用戶。

無論如何,我怎樣才能看到最近的5個或10個條目最近的活動,看看有什麼變化?

+7

呀,真的應該像,呃,'混帳log`。 – 2014-08-24 03:49:31

回答

227

limit選項,如:

svn log --limit 4 

svn log -l 4 

只有最後4項

10

管通過less或其他尋呼機輸出:

svn log | less 
+1

如果您有> 23k版本,您仍然會等待約20秒才能看到第一個條目(以及何時不使用詳細日誌)。但它很好 - 最近在頂部顯示。並且比TortoiseSVN的每次100個分頁更好!當你想走得更遠時。 – 2012-11-14 20:42:34

121

況且什麼Bert F said,很多命令,包括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或書中的相關章節Version Control with Subversion

+8

非常感謝你的解釋,@Daniel Dinnyes - 我經常遇到與OP相反的問題:`svn log .`可能只會返回最早的版本(同樣用`svn log --limit 4 .`);但如果我調用`svn log -r HEAD:1 .`,那麼我最終會列出所有條目......再次感謝 - 歡呼! – sdaau 2011-11-18 20:39:57

+0

這比較好,因爲`svn log`只顯示當前路徑的變化歷史。 – Ninja 2016-08-25 07:40:28

37

我喜歡使用-v作爲詳細模式。
它會給你提交ID,評論和所有受影響的文件。輸出

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 
+1

詳細選項非常有用 – 2012-09-02 21:03:30

4

要添加到其他人所說,你也可以在你的.bashrc或.bash_aliases文件中創建一個別名:

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

或任何你想要的作爲你的默認

2

但svn日誌仍然是相反的順序,即最近的輸入是首先輸出,滾動我的終端的頂部,然後走了。我真的想要參見最後的條目,即排序順序必須按時間順序排列。唯一能做到這一點的命令似乎是svn log -r 1:HEAD,但是對於包含10000個條目的存儲庫來說,這會花費太長時間。我想出這樣的:

按時間順序顯示最近10項顛覆:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD 
2

如果有人在看着這個老問題,一個方便的命令來查看你上次更新中的更改:

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

LE(感謝蓋瑞評論)
同樣的事情,但更短,更符合邏輯:

svn log -r BASE:HEAD -v

3

正如你已經注意到svn log命令不帶任何參數運行顯示,涉及到您指定的URL或到運行該命令的工作拷貝文件夾的所有日誌消息。

你總是可以細化/限制svn log結果:

  • svn log --limit NUM將只顯示修訂的第一個NUM,
  • svn log --revision REV1(:REV2)將顯示日誌消息REV1修訂或REV1 - REV2範圍,
  • svn log --search將顯示與您指定的搜索模式相匹配的修訂(該命令在Subversion 1.8和更高版本的客戶端中可用)。您可以通過
    • 修訂的作者(即提交者的用戶名)進行搜索,
    • 日修訂承諾時,
    • 修訂註釋文本(日誌消息),路徑
    • 名單的修訂改變。
2

這個答案是在關於Subversion的子命令選項有更多的問題執導。對於每個可用的子命令(即添加,日誌,狀態...),只需添加--help選項即可顯示可用於子命令的可用選項的完整列表以及如何使用它們的示例。下面的代碼片段是直接從svn log --help命令輸出的「示例」部分下采取:

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