svn 로그에 특정 사용자의 커밋을 표시하는 방법
특정 사용자의 커밋을 svn으로 표시하는 방법svn 로그용 스위치를 찾을 수 없었습니다.
다음을 사용할 수 있습니다.
svn log | sed -n '/USERNAME/,/-----$/ p'
지정된 사용자(USERNAME)에 의해 실행된 모든 커밋이 표시됩니다.
갱신하다
@bahrep에서 제안했듯이 서브버전 1.8에는--search
선택.
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
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)
위의 내용을 svnLogStripBy로 저장하는 경우Author.py은 다음과 같이 부를 수 있습니다.
svn log --xml other-options | svnLogStripByAuthor.py user
모두가 Linux(등)에 주목하고 있는 것 같기 때문에:Windows와 동등한 것은 다음과 같습니다.
svn log [SVNPath]|find "USERNAME"
svn log | grep user
대부분 효과가 있습니다.
또는 더 정확하게 말하면:
svn log | egrep 'r[0-9]+ \| user \|'
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 쿼리로 넘어갈 수 있습니다.
다음은 xslt를 사용한 솔루션입니다.단, xsltproc는 스트리밍 프로세서가 아니기 때문에 로그를 제한해야 합니다.사용 예:
svn log -v --xml --limit=500 | xsltproc --stringparam author yonran /path/to/svnLogFilter.xslt - | xsltproc /path/to/svnLogText.xslt - | less
svnLogFilter.xslt
<!--
svnLogFilter.xslt
Usage: (note: use double dashes; I can't do double dashes in a XML comment)
svn log -xml | xsltproc -stringparam author yonran svnLogFilter.xslt -
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="author" select="''"/>
<xsl:strip-space elements="log"/>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="lowercaseAuthor" select="translate($author, $uppercase, $lowercase)"/>
<xsl:template match="/log">
<xsl:copy>
<xsl:apply-templates name="entrymatcher"/>
</xsl:copy>
</xsl:template>
<xsl:template name="entrymatcher" match="logentry">
<xsl:variable name="lowercaseChangeAuthor" select="translate(author, $uppercase, $lowercase)"/>
<xsl:choose>
<xsl:when test="contains($lowercaseChangeAuthor, $lowercaseAuthor)">
<xsl:call-template name="insideentry"/>
</xsl:when>
<!--Filter out-->
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
<xsl:template name="insideentry" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
svnLogText.xslt
<!--
svnLogText.xslt
Usage: (note: use double dashes; I can't do double dashes in a XML comment)
svn log -xml -limit=1000 | xsltproc svnLogText.xslt -
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="author" select="''"/>
<xsl:param name="xml" select="false()"/>
<xsl:output method="text"/>
<xsl:template match="/log">
<xsl:apply-templates name="entrymatcher"/>
<xsl:text>------------------------------------------------------------------------
</xsl:text>
</xsl:template>
<xsl:template name="entrymatcher" match="logentry">
<xsl:text>------------------------------------------------------------------------
</xsl:text>
<xsl:text>r</xsl:text><xsl:value-of select="@revision"/>
<xsl:text> | </xsl:text>
<xsl:value-of select="author"/>
<xsl:text> | </xsl:text>
<xsl:value-of select="date"/>
<xsl:text>

</xsl:text>
<xsl:if test="paths">
<xsl:text>Changed paths:
</xsl:text>
<xsl:for-each select="paths/path">
<xsl:text> </xsl:text>
<xsl:value-of select="@action"/>
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:if>
<xsl:text>
</xsl:text>
<xsl:value-of select="msg"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Subversion 1.8부터는 및 명령줄 옵션을 명령어와 함께 사용할 수 있습니다.
따라서 실행만큼 간단해야 합니다.svn log --search JohnDoe
.
Perl을 사용하여 사용자 이름으로 로그를 필터링하고 커밋메시지를 유지할 수 있습니다.Perl에서 "행"을 구성하는 것을 결정하는 $/ 변수를 설정하기만 하면 됩니다.이 값을 SVN 로그 엔트리의 구분자로 설정하면 Perl은 한 번에 1개의 레코드를 읽고 레코드 전체의 사용자 이름을 일치시킬 수 있습니다.아래를 참조해 주세요.
svn log | perl -ne 'BEGIN{$/="------------------------------------------------------------------------"} print if /USERNAME/'
체크인과 함께 To GET diffs.
리비전 번호를 파일로 가져옵니다.
svn log | sed -n '/USERNAME/,/-----$/ p'| grep "^r"
이제 파일을 읽고 각 리비전에 대해 diff를 실행합니다.
while read p; do svn log -v"$p" --diff ; done < Revisions.txt
Python의 대본을 작성했습니다.
#!/usr/bin/python
# coding:utf-8
import sys
argv_len = len(sys.argv)
def help():
print 'Filter svnlog by user or date! '
print 'USEAGE: svnlog [ARGs] '
print 'ARGs: '
print ' -n[=name]: '
print ' filter by the special [=name]\n'
print ' -t[=date]: '
print ' filter by the special [=date] '
print 'EXP: '
print '1. Filter ruikye\'s commit log \n'
print ' svn log -l 50 | svnlog -n=ruikye\n'
if not argv_len - 1:
help()
quit()
author = ''
date = ''
for index in range(1, argv_len):
argv = sys.argv[index]
if argv.startswith('-n='):
author = argv.replace('-n=', '')
elif argv.startswith('-t='):
date = argv.replace('-t=', '')
else:
help()
quit()
if author == '' and date == '':
help()
quit()
SPLIT_LINE =
'------------------------------------------------------------------------'
src = ''.join(sys.stdin.readlines()).replace('\n\n', '\n')
lines = src.split(SPLIT_LINE)
for line in lines:
if author in line and date in line:
print SPLIT_LINE, line
if len(lines):
print SPLIT_LINE
및 용도:
$ mv svnlog.py svnlog
$ chmod a+x svnlog
$ cd /usr/local/bin
$ ln -s ~/mycmd/svnlog filter
$ svn log | filter -n=ruikye -t=2015-03-04
언급URL : https://stackoverflow.com/questions/4499910/how-to-display-a-specific-users-commits-in-svn-log
'programing' 카테고리의 다른 글
iOS 또는 MacOS에서 활성 인터넷 연결을 확인하는 방법은 무엇입니까? (0) | 2023.04.19 |
---|---|
Java7에서 문자열에서 경로 생성 (0) | 2023.04.19 |
Windows 10에서 WSL 단말기의 비프음을 무효로 합니다. (0) | 2023.04.19 |
Swift에서 앱이 장치 또는 시뮬레이터용으로 구축되어 있는지 여부를 감지하는 방법 (0) | 2023.04.14 |
VBA 또는 매크로 없이 Excel을 루프인하려면 어떻게 해야 합니까? (0) | 2023.04.14 |