উত্তর:
আপনি এটি ব্যবহার করতে পারেন:
svn log | sed -n '/USERNAME/,/-----$/ p'
এটি আপনাকে নির্দিষ্ট ব্যবহারকারীর দ্বারা তৈরি প্রতিটি প্রতিশ্রুতি প্রদর্শন করবে (USERNAME)।
হালনাগাদ
@ বাহারেপ দ্বারা প্রস্তাবিত হিসাবে, সাবভারশন 1.8 একটি --search
বিকল্পের সাথে আসে ।
p
) মুদ্রণ করতে বলে ।
svn log
একটি কাজের অনুলিপি সম্পাদন করার দরকার নেই । আপনি আপনার সংগ্রহস্থলও নির্দিষ্ট করতে পারেন svn log https://your-svn-repo
।
--search
বিকল্পটিকে সমর্থন করে ।
সাব্ভারশনটি 1.8 বা তার পরে:
svn log --search johnsmith77 -l 50
লেখকের মিলগুলি ছাড়াও, এটি প্রতিবেদক বার্তায় সেই ব্যবহারকারীর নাম থাকা এসভিএন কমিটসও সক্রিয় করবে, যা আপনার ব্যবহারকারীর নাম সাধারণ শব্দ না হলে ঘটবে না n't
-l 50
সর্বশেষ 50 টি এন্ট্রির মধ্যে অনুসন্ধান সীমিত হবে।
--search ARG
অনুসন্ধান প্যাটার্ন এআরজির সাথে মেলে এমনগুলি দেখাতে লগ বার্তাগুলি ফিল্টার করে।
প্রদত্ত অনুসন্ধানের প্যাটার্নটি কোনও লেখকের, তারিখ, লগ বার্তা পাঠ্যের (যদি
--quiet
ব্যবহার না করা হয়) সাথে মেলে বা--verbose
বিকল্পটি সরবরাহ করা হয় তবে পরিবর্তিত পথটি কেবল লগ বার্তাগুলি প্রদর্শিত হয়।যদি একাধিক
--search
বিকল্প সরবরাহ করা থাকে তবে কোনও সরবরাহিত অনুসন্ধানের নিদর্শনগুলির সাথে এটি মেলে যদি একটি লগ বার্তা প্রদর্শিত হয়।যদি
--limit
এটি ব্যবহার করা হয় তবে এটি নির্দিষ্ট সংখ্যক মিলের লগ বার্তাগুলিতে আউটপুটকে সীমাবদ্ধ না রেখে অনুসন্ধান করা লগ বার্তাগুলির সংখ্যাকে সীমাবদ্ধ করে।
http://svnbook.red-bean.com/en/1.8/svn.ref.svn.html#svn.ref.svn.sw.search
svn log --search foo --search bar -l 30
,। If multiple --search options are provided, a log message is shown if it matches any of the provided search patterns.
এসএনএন এর জন্য অন্তর্নির্মিত বিকল্পগুলি নিয়ে আসে না। svn log --xml
আপনাকে আউটপুটটি নিজেরাই পার্স করতে এবং আকর্ষণীয় অংশগুলি পেতে অনুমতি দেওয়ার জন্য এটির একটি বিকল্প রয়েছে।
এটি বিশ্লেষণের জন্য আপনি কোনও স্ক্রিপ্ট লিখতে পারেন, উদাহরণস্বরূপ, পাইথন ২.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
যেহেতু সকলেই লিনাক্স (এট আল) এর দিকে ঝুঁকছেন বলে মনে হচ্ছে: উইন্ডোজ সমতুল্য:
svn log [SVNPath]|find "USERNAME"
svn log | grep user
বেশিরভাগ অংশের জন্য কাজ করে।
বা আরও নির্ভুল হতে:
svn log | egrep 'r[0-9]+ \| user \|'
-A
প্রেক্ষাপট প্রদর্শন করতে গ্রেপ করতে পারেন , তবে এই সংখ্যাটি স্থির যেখানে কমিট বার্তাটি পরিবর্তনশীল দৈর্ঘ্যের। আপনি সেড বা অনুরূপ দিয়ে একটি সমাধান করতে পারেন, তবে এটি প্রচেষ্টা। : পি
| awk '{ print "-" $1 }' | xargs svn log
Yvoyer এর সমাধানটি কার্যকরভাবে কাজ করার সময়, এখানে এসভিএন এর এক্সএমএল আউটপুটটি ব্যবহার করে এটি ভাগ করে নেওয়া হচ্ছে xmlstarlet
।
svn log --xml | xmlstarlet sel -t -m 'log/logentry' \
--if "author = '<AUTHOR>'" \
-v "concat('Revision ', @revision, ' ', date)" -n -v msg -n -n
এখান থেকে আপনি আরও উন্নত এক্সএমএল ক্যোয়ারিতে যেতে পারেন।
এক্সস্ল্ট ব্যবহার করে আমার সমাধানটি এখানে। দুর্ভাগ্যক্রমে, যদিও, 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 সঙ্গে প্রারম্ভকালীন, আপনি ব্যবহার করতে পারেন --search
এবং --search-and
সঙ্গে কম্যান্ড-লাইন অপশন svn log
কমান্ডটি ।
সুতরাং এটি চলমান হিসাবে সহজ হতে হবে svn log --search JohnDoe
।
আপনি ব্যবহারকারীর নাম দ্বারা লগ ফিল্টার এবং প্রতিশ্রুতি বার্তা বজায় রাখতে পার্ল ব্যবহার করতে পারেন use কেবল $ / ভেরিয়েবল সেট করুন যা পার্লের কোন "লাইন" গঠন করে তা স্থির করে। আপনি যদি এসভিএন লগের এন্ট্রিগুলির পৃথককে এটি সেট করেন, পার্ল একবারে একটি রেকর্ড পড়বে এবং তারপরে পুরো রেকর্ডে আপনার ব্যবহারকারীর নামটি মিলিয়ে নিতে সক্ষম হওয়া উচিত। নিচে দেখ:
svn log | perl -ne 'BEGIN{$/="------------------------------------------------------------------------"} print if /USERNAME/'
চেকিন সহ পৃথকীকরণ করতে।
একটি ফাইলের মধ্যে সংশোধন নম্বর পান:
svn log | sed -n '/USERNAME/,/-----$/ p'| grep "^r"
এখন ফাইলটি পড়ুন এবং প্রতিটি সংশোধনের জন্য পৃথকীকরণ করুন:
while read p; do svn log -v"$p" --diff ; done < Revisions.txt
আমি পাইথনের একটি স্ক্রিপ্ট লিখেছিলাম:
#!/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
--search
সাবভারশন 1.8 বা আরও নতুন ক্লায়েন্টের সাথে বিকল্পটি ব্যবহার করুন ।