基本上我希望 svn status -u 只显示特定用户更改的文件,因为这样我就可以只更新那些。
问问题
237 次
4 回答
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
于 2012-07-05T20:59:10.527 回答
0
您将需要解析svn log
(or svn status
) 的输出以仅搜索该用户的条目。
如果使用svn log --xml
,则可以对结果执行 XPath 查询或应用 XSLT 来执行此过滤,从而捕获具有包含所需用户名<logentry>
的节点的所有节点。<author>
于 2012-07-02T17:44:04.223 回答
0
请参考下面的示例,使用带有用户名 'jainendra'的svn log 命令:
svn log | sed -n '/jainendra/,/-----$/ p'
这里sed是一个 linux 命令。
于 2012-07-02T11:46:46.290 回答
0
尝试使用
svn log --username <username>
命令
此外,您可以添加 --limit 参数,这样您的屏幕就不会被提交填满。这是在 sed'ing svn 的输出作为用户名时无法轻易实现的。
svn log --username ankit --limit 2
于 2012-07-02T11:48:44.787 回答