有没有一种简单的方法可以将subversion日志导出到CSV文件?
我想用它们来估算我在项目上花费的时间,在电子表格中这样做很容易。
感谢。
答案 0 :(得分:9)
这个简短的Python脚本将提供带有SVN日志输出的CSV:
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author').encode('utf-8'),
child.findtext('msg').encode('utf-8'),
])
它通过命令行参数传递给基础SVN调用,因此如果您只想查看版本34及更高版本,可以按如下方式调用它:
$ svnlog2csv -r 34:HEAD >my_spreadsheet.csv
答案 1 :(得分:2)
脚本的Thanx!我添加了这个稍微修改,因为我们的SVN存储库是UTF-8,带有重音字符(法语)和脚本borked:
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
import codecs
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author'),
child.findtext('msg').encode("utf-8"),
])
干杯,
答案 2 :(得分:2)
谢谢大家,非常乐于助人。我发现在Windows计算机上python csv_writer需要二进制文件输出,否则会发出额外的回车符。以下脚本处理这种情况,并在提交消息中间删除换行符(替换为正斜杠)以确保单行输出。
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author'),
child.findtext('msg').encode("utf-8").replace('\n','/'),
])
(现在,还有谁希望svn log采用与git log相同的选项? - - )
答案 3 :(得分:1)
我取得巨大成功的另一个快速解决方案是here at Chris' blog。它是一个Java程序,可以快速将其转换为CSV文件。您还可以使用此处显示的在线版本。通常他会发布JavaScript文章,但我猜他也认识Java,因为它们应该非常相似。
答案 4 :(得分:0)
我找到了这个方便的小脚本
svn log -r {2015-05-01}:{2015-05-31} http://svn.company.co.id/dev/ | tr -d '\n' | sed -r 's/-{2,}/\n/g' | sed -r 's/ \([^\)]+\)//g' | sed -r 's/^r//' | sed -r "s/[0-9]+ lines?//g" | sort -g | sed 's/ | /;/g' > list.csv
从2015年5月1日到2015年5月31日的日期导出svn日志list.csv ..这里我使用半冒号作为分隔符..因为我的开发人员在他们的笔记中使用逗号..