Xml 如何将Subversion日志导出到电子表格

Xml 如何将Subversion日志导出到电子表格,xml,svn,logging,tortoisesvn,spreadsheet,Xml,Svn,Logging,Tortoisesvn,Spreadsheet,是否有办法将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 如果有必要,

是否有办法将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。但我真的不想:(

因为您使用的是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
. . .
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
. . .

但是,使用此命令

Get-SvnLogData | Format-Table -AutoSize
…您可以告诉PowerShell给您一张表而不是列表,例如:

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
. . .
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中打开:


克里斯·韦斯特想出了一个非常简单但有效的解决方案: 实际上,页面似乎移动到了这里:

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

  • 使用以下Subversion命令从存储库的日志中创建xml文件:

    svn log-v--xml>repository_log.xml

  • 将xml文件导入到Excel电子表格中(不确定是否可以与LibreOffice/OpenOffice一起使用),例如,从cmd:

    启动excel存储库\u log.xml

  • 然后可以将其保存为电子表格


  • 就这样

    迈克尔·索伦斯的回答非常棒,我就是这样提取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>
    
    #############################################################
    
    #Get SvnLogData | sort Object@{Expression=“Date”;Descending=$true}|选择Object-first 20 |导出Csv-Path temp.Csv
    #############################################################
    # 
    函数Get-SvnLogData()
    {
    ([xml](svnlog-v--xml)).log.logentry |%{
    $nestedEntry=$_
    $\路径.path |%{
    $path=$_
    $nestedEntry |选择对象-属性`
    作者`
    @{n='Revision';e={([int]$\.Revision)}`
    @{n='Date';e={Get Date$\.Date}`
    @{n='Action';e={$path.Action}`
    @{n='Path';e={$Path.InnerText}`
    }
    }
    }
    # 
    # 
    光盘\
    cd SVN\BusinessAnalysts\SSRSReports\ssrs2016\U解决方案
    # 
    #     
    获取SvnLogData | sort Object@{Expression=“Date”;Descending=$true}|选择Object-first 20 |导出Csv-Path temp.Csv
    #雷姆https://social.technet.microsoft.com/Forums/windowsserver/en-US/399abe9a-195c-4362-9081-6fd9d79b88ad/need-help-converting-getlocation-info-to-string?forum=winserverpowershell 
    $CurrentDirectory=获取位置
    $path=$CurrentDirectory.tostring()+“\”
    调用项$path“temp.csv”
    # 
    #############################################################
    
    教程:PS1文件-使用PowerShell运行


    哇,太棒了,我不知道PowerShell是什么,多亏了这个,我才没有发现新的工具。导出日志的脚本也很完美+1请注意,您可以获取XML输出中的任何属性,例如,我还对消息感兴趣,可以通过添加以下行(在适当的位置)获得该消息:@{n='Message';e={$\.msg}我喜欢powershell,我喜欢这个答案,太棒了!我的repo有大量提交,所以我只检索了最后20个,如下所示:
    Get SvnLogData|sort Object@{Expression=“Date”;Descending=$true}选择对象-前20个导出Csv-Path temp.Csv
    欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。这非常有效,我唯一需要做的额外步骤是在Notepad++中打开xml,并在导入Excel之前将编码保存为ANSI。