svn에서 특정 사용자의 커밋을 표시하는 방법은 무엇입니까? svn log에 대한 스위치를 찾지 못했습니다.
답변
이것을 사용할 수 있습니다 :
svn log | sed -n '/USERNAME/,/-----$/ p'
지정된 사용자 (USERNAME)의 모든 커밋을 보여줍니다.
최신 정보
@bahrep이 제안한 것처럼 subversion 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)
위의 내용을 svnLogStripByAuthor.py로 저장하면 다음과 같이 호출 할 수 있습니다.
svn log --xml other-options | svnLogStripByAuthor.py user
답변
모든 사람들이 리눅스 (et al)에 대해 기울고있는 것 같습니다.
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>
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)