20

有没有办法将 Subversion 日志消息导出为电子表格(excel、csv 等)格式?

从 TortoiseSVN 的日志消息窗口复制时,它会粘贴以下格式的文本:

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。但我真的不想:(

4

4 回答 4

43
  1. 使用以下 Subversion 命令从存储库的日志中创建一个 xml 文件:

    svn log -v --xml > repository_log.xml

  2. 将 xml 文件导入Excel电子表格(不确定它是否适用于 LibreOffice/OpenOffice),例如从 cmd:

    启动excel repository_log.xml

  3. 然后,您可以将其保存为电子表格。

就是这样!

于 2013-07-12T19:58:26.523 回答
27

由于您使用的是 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 中打开它:

SVN 转 Excel

于 2012-07-11T17:37:50.937 回答
2

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/

他在该页面上列出了两个解决方案。第一个是输出 CSV 的 Java 程序。第二个是将粘贴的 SVN 日志转换为 CSV 的 JSBin 页面。

于 2012-10-09T19:26:21.580 回答
1

Michael Sorens 的回答很棒,这就是我提取 SVN 日志数据的方式。我正在发布一个补充答案,向您展示如何将他的解决方案应用到可以立即运行的脚本文件中。

创建下面看到的脚本并将其保存到 .PS1 文件。在基本记事本程序中打开并查看文件。然后固定文件。现在您所要做的就是右键单击我的记事本任务栏图标,将文件悬停,右键单击该文件,从弹出窗口中选择“使用 PowerShell 运行”。在一个实例中,会弹出 CSV 数据文件,对我来说,它会在 Excel 中打开。

关于您可能要查看和修改的脚本文件。

  • 我的仓库有大量提交,所以我只检索了最后 20 个
  • 更新文件路径
  • 使用 Invoke-Item cmdlet自动打开输出文件
  • 正如此线程中所建议的,您可以添加@{n='Message'; e={$_.msg }}

获取-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>

#############################################################

补习:PS1 文件 - 使用 PowerShell 运行

在此处输入图像描述

于 2019-07-12T13:38:50.113 回答