如何顯示特定用戶在svn日誌中的提交?



bash version-control (8)

如何在svn中顯示特定用戶的提交? 我沒有找到用於svn日誌的任何開關。

https://src-bin.com


Answer #1

svn沒有內置這個選項。 它有一個svn log --xml選項,允許你自己分析輸出,並獲得有趣的部分。

您可以編寫腳本來解析它,例如,在Python 2.6中:

import sys
from xml.etree.ElementTree import iterparse, dump

author = sys.argv[1]
iparse = iterparse(sys.stdin, ['start', 'end'])

for event, elem in iparse:
    if event == 'start' and elem.tag == 'log':
        logNode = elem
        break

logentries = (elem for event, elem in iparse
                   if event == 'end' and elem.tag == 'logentry')

for logentry in logentries:
    if logentry.find('author').text == author:
        dump(logentry)
    logNode.remove(logentry)

如果將上面的內容保存為svnLogStripByAuthor.py,則可以將其稱為:

svn log --xml other-options | svnLogStripByAuthor.py user

Answer #2

你可以使用這個:

svn log | sed -n '/USERNAME/,/-----$/ p' 

它將向您顯示指定用戶(USERNAME)所做的每一次提交。

UPDATE

正如@bahrep所建議的, Subversion 1.8帶有一個--search選項。



Answer #4

您可以使用Perl通過用戶名來過濾日誌維護提交消息。 只需在Perl中設置$ /變量來決定什麼構成“行”。 如果您將其設置為SVN日誌條目的分隔符,Perl將一次讀取一條記錄,然後您應該能夠匹配整個記錄中的用戶名。 見下文:

svn log | perl -ne 'BEGIN{$/="------------------------------------------------------------------------"} print if /USERNAME/'

Answer #5

獲取差異和簽入。

獲取修訂號碼到一個文件中:

svn log | sed -n '/USERNAME/,/-----$/ p'| grep "^r" 

現在通讀每個修訂的文件&執行diff:

while read p; do   svn log -v"$p" --diff ; done < Revisions.txt 

Answer #6

這對我有用(我使用Subversion 1.8)

svn log --search johnsmith77 -l 50

除了作者匹配之外,這還會在提交信息中啟動包含該用戶名的SVN提交,如果您的用戶名不是常見單詞,則該提交不應該發生。

-l 50將限制搜索到最近的50個條目。

--search ARG

過濾日誌消息以僅顯示與搜索模式ARG匹配的日誌消息。

日誌消息僅在提供的搜索模式與作者,日期,日誌消息文本(除非使用--quiet )匹配時顯示,或者如果還提供了--verbose選項,則顯示更改後的路徑。

如果提供了多個--search選項,則會顯示一條日誌消息,如果它匹配任何提供的搜索模式。

如果使用--limit ,它將限制搜索到的日誌消息的數量,而不是限制輸出到特定數量的匹配日誌消息。

http://svnbook.red-bean.com/en/1.8/svn.ref.svn.html#svn.ref.svn.sw.search


Answer #7

雖然yvoyer的解決方案可以正常工作,但我們可以使用SVN的XML輸出,並使用xmlstarlet解析它。

svn log --xml | xmlstarlet sel -t -m 'log/logentry' \
  --if "author = '<AUTHOR>'" \
  -v "concat('Revision ', @revision, ' ', date)" -n -v msg -n -n

從這裡你可以進入更高級的XML查詢。


Answer #8
svn log | grep user

大部分工作。

或者更準確:

svn log | egrep 'r[0-9]+ \| user \|'




version-control