如何查看特定用户完成的SVN存储库中的更改?

时间:2012-07-02 11:37:52

标签: svn

基本上我希望svn status -u只显示特定用户更改的文件,因为我只能更新那些文件。

4 个答案:

答案 0 :(得分:2)

这种类型的分析/报告问题在PowerShell中非常简单(当然只有Windows)。从这个主力开始,将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   }}`
        }
    }
}

将日志转换为对象后,PowerShell的本机cmdlet提供了无数种按摩数据的方法。以下是解决手头问题的几种可能性:

问题1:作者x每次触摸的文件是什么时候?

显示特定作者提交的文件; 文件可能会多次出现(包括每次作者触摸文件时)。

Get-SvnLogData |
where { $_.Author -eq 'smith' } |
select Revision,Date,Path | 
sort -property `
    @{ Expression="Path";     Descending=$false }, `
    @{ Expression="Revision"; Descending=$true  } |
Format-Table -AutoSize
# To sort by latest changes instead of by file,
# swap Path and Revision properties in sort statement.

问题2:作者x最后一次触摸每个文件的时间是什么时候(偶然触摸了多少次)?

显示特定作者提交的文件; 每个文件只显示一次触摸次数和最后触摸日期。

Get-SvnLogData |
where { $_.Author -eq 'smith' } |
group Path |
select `
    @{ n='Last Touched'; e= {@($_.group | sort date -Descending)[0].date} }, `
    @{ n='NumberOfTimesTouched'; e={$_.count} }, `
    name |
sort name | Format-Table -AutoSize
# To sort by latest changes instead of by file change last line to:
# sort date | Format-Table -AutoSize

答案 1 :(得分:0)

请参阅下面的示例,使用带有用户名的svn log command'jainendra':

svn log | sed -n '/jainendra/,/-----$/ p'

这里 sed 是一个linux命令。

答案 2 :(得分:0)

尝试使用

svn log --username <username>

命令

此外,您可以添加--limit arg,这样就不会让您的屏幕显示为提交。当你为svn输出用户名时,这是你无法轻易实现的。

svn log --username ankit --limit 2

答案 3 :(得分:0)

您需要解析svn log(或svn status)的输出,才能搜索该用户的条目。

如果使用svn log --xml,则可以对结果执行XPath查询或应用XSLT执行此过滤,使用包含所需用户名的<logentry>节点捕获所有<author>个节点