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

11

背景:编写自动化发布脚本,从SVN导出版本间的更改文件并上传到远程服务器。

svn log命令显示修改的文件和属性,但似乎不能在详细输出中区分内容修改和属性修改。

我是否理解输出有误,或者是否有一种简单的方法可以获取版本之间更改的文件列表而忽略属性更改?

这是我的示例命令:

#: 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
------------------------------------------------------------------------

前两个是属性更改(合并信息,忽略等),而第三项是真正需要获取以避免在整个根目录上进行导出的实际内容编辑。

有没有办法从svn日志或其他命令中获取/过滤出只有内容更改��部分?

5个回答

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

这非常有用,但似乎对我无效。我正在使用cygwin svn客户端,并将startrev设置为我知道存在属性更改的修订版本,并将endrev设置为下一个修订版本号。没有输出到标准输出,echo $?返回0。 - andersand
哦,我好像(不情愿地)在我的svn客户端上有一个不同的区域设置。这就解释了为什么grep找不到任何东西^^ - andersand

3

提供信息,我在如何使'svn log'忽略属性更改?发布了一个bash脚本,它实现了jeroenh所暗示的内容...处理svn log的输出以驱动svn diff并过滤后者的输出。


1

我知道这个问题已经有答案了,但是如果有人想要一个小指南,我写了这篇关于如何从svn日志/差异中获取可查询数据的帖子(包括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

等等...


1

我认为唯一的方法是实际解析每个版本的差异输出,尽管这似乎相当脆弱,而且可能非常缓慢...

以下是仅更改属性的文件的差异条目示例:

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

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

这是一个包含更改内容和更改属性的文件差异条目的样子:

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

是的,我有些避免回答这个问题,因为输出看起来很凌乱,可能不可靠。虽然这可能是唯一的选择,除非其他人有一些想法。假设“Index:<文件名>”字符串总是出现在内容更改时,那么我想有一些解析的余地。嗯,感谢您的建议。 - Dan

0

这个可以工作吗?

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

我的svn服务器版本是1.5.1,而且svn-log命令中没有--with-no-revprops选项。这是一个新功能吗?是不是该升级我的代码库了? - Dan
@Dan:是的,这是1.6版本的一个新功能。 - jeroenh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接