如何使用SVN日志检测修改后的属性

时间:2010-02-08 23:56:54

标签: svn automated-deploy

后台:编写自动发布脚本,以便在SVN版本之间导出已更改的文件并上传到远程服务器。

svn log命令显示已修改的文件属性,但似乎无法区分内容修改与属性修改之间的详细输出。

我是否错误地阅读此输出,或者是否有一种简单的方法可以在修订版之间获取已更改文件的列表,同时忽略道具更改

这是我的示例cmd:

#: svn log "someurl" -r 2210:HEAD -v -q

Output:
------------------------------------------------------------------------
r2211 | author | 2010-02-08 12:36:56 +1300 (Mon, 08 Feb 2010)
Changed paths:
   M /branches/project/release-v1-r-maintenance
   M /branches/project/release-v1-r-maintenance/offroot/
   M /branches/project/release-v1-r-maintenance/offroot/test.config
------------------------------------------------------------------------

前两个只是prop更改(mergeinfo,ignores等),而第三个项目是实际的内容编辑,这是我想要抓取的真实项目,以避免全部导出整个root。

无论如何都要从svn日志或其他命令中获取/过滤掉内容更改。

5 个答案:

答案 0 :(得分:4)

这是我刚刚编写的一个脚本,用于获取所有修订版本的详细日志,其中属性在当前svn目录内更改完成。只需将正确的开始和结束版本放在您认为发生了房产变更的地方。它不是很快,但它确实有效。

#!/bin/bash
# Show the verbose log of the revisions, where svn properties 
# inside the current folder where added/removed
startrev=4600
endrev=4620
for i in $(eval echo {$startrev..$endrev})
  do
    svn diff -c $i 2>/dev/null | grep "Property changes on" 1>/dev/null
    if [ $? == 0 ]; then
      echo "Property change in revision $i:"
      svn log -r $i --verbose
    fi
done

答案 1 :(得分:3)

仅供参考,我在How to make ‘svn log’ ignore property changes?发布了一个bash脚本,它实现了jeroenh所暗示的......处理svn log的输出以驱动svn diff并过滤后者的输出。

答案 2 :(得分:1)

我认为唯一的方法是实际解析每个修改的diff输出,虽然这看起来相当脆弱,而且可能非常慢......

这是diff条目查找仅具有已更改属性的文件的方式:

c:\test\wc>svn diff -c 3

Property changes on: test.txt
___________________________________________________________________
Added: test
   + test

这是diff条目查找具有更改内容和已更改属性的文件的方式:

c:\test\wc>svn diff -c 4
Index: test.txt
===================================================================
--- test.txt    (revision 3)
+++ test.txt    (revision 4)
@@ -1 +1,2 @@

+asdfads

Property changes on: test.txt
___________________________________________________________________
Added: someproperty
   + somepropertyvalue

答案 3 :(得分:1)

我知道这个问题已经得到解答,但是如果有人想要一个小指南,我已经发表了关于how to get get queryable data from svn log/diff的帖子(包括bash脚本,xslt和oracle数据库脚本)。通过执行此操作,您可以针对视图v_svnlog

运行各种有用的查询

此补丁中的“热门”文件:

select path, count(*) num from v_svnlog
group by path
order by num desc, path asc

作者的大多数测试

select author, count(*) num from v_svnlog
where path like '%Test%'
group by author
order by num desc

依旧......

答案 4 :(得分:0)

这有用吗?

svn log --xml --with-no-revprops