基本上我希望svn status -u只显示特定用户更改的文件,因为我只能更新那些文件。
答案 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>
个节点