如何获取SVN中文件/文件夹属性的历史记录?

mr.*_*. w 21 svn history properties

确定何时在文件或文件夹上设置属性的最简单方法是什么?基本上,我正在寻找一种适用于属性的"svn blame".

log子命令使用户可以获取文件或文件夹的完整历史记录,包括修改属性的时间.但是,它不区分属性修改和其他类型的修改,这当然也意味着它不会告诉您有关特定属性的历史记录.

status命令区分属性和其他类型的修改,但仅适用于工作副本.

Blame本身只支持文件,而不支持目录,它适用于内容,而不是属性.

想法?

Don*_*kby 8

我能想到的最好的方法是编写一个小脚本或应用程序,它使用svn propget命令将当前属性值转储到文本文件,然后返回修订版,将属性转储到另一个文本文件并比较两者.一旦检测到更改,它就会打印出修订号(实际上是更改后的修订版号)以及提交更改的用户.

这是在版本80转储字典目录的svn:ignore属性的示例命令:

svn propget -r 80 svn:ignore dictionary
Run Code Online (Sandbox Code Playgroud)


rlo*_*ang 7

获取给定文件夹的属性何时更改的列表的一种方法是:

svn log -v . |grep "   M /trunk/datacenter$" -B2
Run Code Online (Sandbox Code Playgroud)

其中给出了以下输出:

r963 | someuser | 2013-08-26 20:32:37 +0200 (Mon, 26 Aug 2013) | 4 lines
Changed paths:
   M /trunk/datacenter
--
r908 | someotheruser | 2013-08-15 12:15:03 +0200 (Thu, 15 Aug 2013) | 1 line
Changed paths:
   M /trunk/datacenter
--
r413 | someuser | 2013-04-26 09:02:08 +0200 (Fri, 26 Apr 2013) | 1 line
Changed paths:
   M /trunk/datacenter
Run Code Online (Sandbox Code Playgroud)

然后,您可以查看每个修订版以查看更改的内容:

$ svn diff -c963
Run Code Online (Sandbox Code Playgroud)

在底部:

...

Property changes on: .
___________________________________________________________________
Modified: svn:ignore
## -22,3 +22,5 ##

 .idea
 .classpath
+
+dev-config.groovy
Run Code Online (Sandbox Code Playgroud)

缺点:

  • 无法指定您感兴趣的属性
  • 乏味

注意:不确定-B2在所有情况下都足够了,因为"M/trunk/datacenter"行可能不是第一行

  • 最佳答案,很久以前就赞成了。很难相信 Subversion 没有提供过滤此类详细信息的本地方法。 (2认同)