有没有办法将Subversion日志消息导出到电子表格(excel,csv等)格式?
从TortoiseSVN的Log Messages窗口复制时,它会按以下格式粘贴文本:
Revision: 174
Author: CARDINALHEALTH\enrique.colon
Date: Wednesday, July 11, 2012 9:37:02 AM
Message: CR #58514
----
Modified : /trunk/ob_progs/utility/connect_peek
如有必要,我可以创建一个脚本,将其重新格式化为CSV格式。但我真的不想:(
而已!
由于您使用的是TortoiseSVN,因此在Windows上使用PowerShell是一种直接的方法。从此函数开始,将svn日志数据转换为PowerShell对象:
Function Get-SvnLogData()
{
([xml](svn log -v --xml)).log.logentry | % {
$nestedEntry = $_
$_.paths.path | % {
$path = $_
$nestedEntry | Select-Object -Property `
Author, `
@{n='Revision'; e={([int]$_.Revision)}}, `
@{n='Date'; e={Get-Date $_.Date }}, `
@{n='Action'; e={$path.action }}, `
@{n='Path'; e={$path.InnerText }}`
}
}
}
默认输出是一个列表,例如:
author : smith
Revision : 29091
Date : 6/26/2012 7:30:44 AM
Action : M
Path : /Utility/trunk/Distribution/file1.txt
author : jones
Revision : 28987
Date : 6/21/2012 3:56:51 PM
Action : M
Path : /Utility/trunk/Distribution/file2.txt
author : msorens
Revision : 28934
Date : 6/21/2012 8:22:17 AM
Action : M
Path : /Utility/trunk/Distribution/file3.txt
author : jones
Revision : 28835
Date : 6/19/2012 8:56:08 AM
Action : A
Path : /Utility/trunk/DAL/stuff.txt
. . .
但是用这个命令......
Get-SvnLogData | Format-Table -AutoSize
...你可以告诉PowerShell给你一个表而不是列表,例如:
author Revision Date Action Path
------ -------- ---- ------ ----
smith 29091 6/26/2012 7:30:44 AM M /Utility/trunk/Distribution/file1.txt
jones 28987 6/21/2012 3:56:51 PM M /Utility/trunk/Distribution/file2.txt
msorens 28934 6/21/2012 8:22:17 AM M /Utility/trunk/Distribution/file3.txt
jones 28835 6/19/2012 8:56:08 AM A /Utility/trunk/DAL/stuff.txt
. . .
并实际回答你的问题:-)你可以很容易地将输出转换为CSV并使用如下命令将其发送到文件:
Get-SvnLogData | Export-Csv -Path temp.csv
双击生成的文件在Excel中打开它:
Chris West提出了一个非常简单而有效的解决方案: http://gotochriswest.com/blog/2012/10/02/svn-log-to-csv-converter/ 实际上页面似乎被移动到这里:http://cwestblog.com/2012/10/02/svn-log-to-csv-converter/
他在该页面列出了两个解决方案。第一个是Java程序,它将输出CSV。第二个是JSBin页面,它将粘贴的SVN日志转换为CSV。
Michael Sorens的答案很棒,这就是我提取SVN日志数据的方法。我发布了一个补充答案,向您展示如何将他的解决方案应用到可以立即运行的脚本文件中。
创建并将下面看到的脚本保存到.PS1文件中。在基本记事本程序中打开并查看该文件。然后固定文件。现在您要做的就是右键单击我的记事本任务栏图标,将文件悬停,右键单击该文件,从弹出窗口中选择“使用PowerShell运行”。在一个实例中,会弹出CSV数据文件,对我来说,它会在Excel中打开。
关于您可能想要查看和修改的脚本文件。
@{n='Message'; e={$_.msg }}
GET-SvnLogData.ps1
# Get-SvnLogData | sort-Object @{Expression="Date"; Descending=$true} | Select-Object -first 20 | Export-Csv -Path temp.csv
#############################################################
# <STEP 1: MUST FIRST CREATE THIS FUNCTION.....>
Function Get-SvnLogData()
{
([xml](svn log -v --xml)).log.logentry | % {
$nestedEntry = $_
$_.paths.path | % {
$path = $_
$nestedEntry | Select-Object -Property `
Author, `
@{n='Revision'; e={([int]$_.Revision)}}, `
@{n='Date'; e={Get-Date $_.Date }}, `
@{n='Action'; e={$path.action }}, `
@{n='Path'; e={$path.InnerText }}`
}
}
}
# <\STEP 1>
# <STEP 2: NAVIGATE TO THE DIRECTORY.....>
cd \
cd SVN\BusinessAnalysts\SSRSReports\ssrs2016_solution
# <\STEP 2>
# <STEP 3: EXTRACT THE LOGDATA TO CSV; OPEN THE FILE.....>
Get-SvnLogData | sort-Object @{Expression="Date"; Descending=$true} | Select-Object -first 20 | Export-Csv -Path temp.csv
#REM https://social.technet.microsoft.com/Forums/windowsserver/en-US/399abe9a-195c-4362-9081-6fd9d79b88ad/need-help-converting-getlocation-info-to-string?forum=winserverpowershell
$CurrentDirectory= get-location
$path = $CurrentDirectory.tostring() + "\"
Invoke-Item $path"temp.csv"
# <\STEP 3>
#############################################################
TUTORIAL:PS1文件 - 使用PowerShell运行