2011-07-29 44 views
13

我正在使用SVN的項目。與svn log -l 10,我可以得到最後10個提交到這個文件夾,與修訂ID,日誌消息等。是否有任何SVN命令,可以讓我在命令行上打印每個變更集的所有差異?我想做一些grepping/etc。與最後的X差異?打印最近10/20/... svn日誌消息與差異

回答

21

在SVN V1.7,還有,您可以用svn log

使用對於舊版本(這可能是你的情況下),你將不得不做一些腳本到

--diff     : produce diff output 
--diff-cmd ARG   : use ARG as diff command 

選項提供修訂到svn diff並獲得輸出

+0

酷!尚未發佈,並且不在我的ubuntu軟件包管理器上提供,但很高興知道它即將推出。 – Rory

+0

@Rory - 他們可以在這裏,但是是預發佈。我使用1.7。 http://subversion.apache.org/packages.html#pre-release – manojlds

1

假設您使用的是Linux,請使用以下腳本。保存它像svn-diffs.sh。 然後運行

sh svn-diffs.sh 10 

這增加了顯示差異內容的文件進行新創建的diff /目錄下。這樣,你可以在不用擔心後面的延遲的情況下通過。這在我的測試中工作。 您可以分別通過diffs/dir下的文件來獲取彩色輸出。

#!/bin/bash 
# Author - Kasun Gajasinghe 
HEAD="HEAD" 
limit=${1} 
[[ -z "$1" ]] && limit=10 

revisions=$(svn log -l $limit | grep -r "r[0-9][0-9]*\w" -o | grep -r "[0-9][0-9]*" -o) 
mkdir diffs 
echo $revisions > diffs/revisions.log 

for revision in ${revisions} 
do 
#  svn diff -r $revision:${HEAD} } | grep -ri "SEARCHME" || exit 1 

     diff=$(svn diff -r $revision:${HEAD}) 
     echo "$diff" > diffs/diffs-$revision-$HEAD.log 
     echo "=======================" >> diffs/diffs-$revision-$HEAD.log 
     HEAD=$revision 
done 

grep -ri "searchme" diffs/ 
2

對於老SVN,你可以使用函數:

svn-log-diff() 
{ 
     for c in `svn log "[email protected]" | grep '^r' | cut -f1 -d ' ' | sed s/r/-c/`; do 
      svn diff --force $c || break 
     done 
} 
+0

對我不起作用 - 「sed」有什麼問題嗎? – larsr

+0

在Ubuntu上測試。有用。 – Const

+0

它的工作原理。我在循環中添加了另外一個命令:'svn log -v $ c',所以我可以在同一個地方看到提交消息和差異(但是由於它需要做第二次查找,所以速度很慢)。 –