Others & 技术 11 Jan 2007 05:36 pm

svn 的属性

在CVS里有一个很有用的功能,就是将源文件中的一些关键字替换,例如提交时间,作者等。Subversion默认不会对此类关键字进行处理,需要设置一些属性,才能实现。

例如我们要在某个源文件的头上自动添加最后一个修改人的名字和提交的时间,首先我们为这个文件设置属性svn:keywords的值为“Date Author”,然后在这个文件需要添加作者和提交时间的地方增加下面这样的字段:

$LastChangedDate$
$Author$

这样这个文件提交后,对应的字符变成了下面的样子:

$LastChangedDate: 2006-11-29 22:58:16 +0800 (星期三, 29 十一月 2006) $
$Author: root $

这里还存在一个问题,就是Subversion总是使用UTF-8替换文本,文件必须使用UTF-8编码。如果我们的文件编码是GBK,而日期显示格式是上面的汉字形式,或者文件路径、文件名包含中文那得到的将是乱码的。
所以最好还是避免使用$Date$ 和 $HeadURL$。

Subversion定义了用来替换的关键字列表,这个列表保存了如下五个关键字,有一些也包括了可用的别名:

Date
这个关键字保存了文件最后一次在版本库修改的日期,看起来类似于$Date: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $,它也可以用LastChangedDate来指定。

Revision
这个关键字描述了这个文件最后一次修改的修订版本,看起来像$Revision: 144 $,也可以通过LastChangedRevision或者Rev引用。

Author
这个关键字描述了最后一个修改这个文件的用户,看起来类似$Author: harry $,也可以用LastChangedBy来指定。

HeadURL
这个关键字描述了这个文件在版本库最新的版本的完全URL,看起来类似$HeadURL: http://svn.collab.net/repos/trunk/README $,可以缩写为URL。

Id
这个关键字是其他关键字一个压缩组合,它看起来就像$Id: calc.c 148 2002-07-28 21:30:43Z sally $,可以解释为文件calc.c上一次修改的修订版本号是148,时间是2002年7月28日,作者是sally。

具体如何做呢?

首先在代码文件里写上相关属性

  1. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  2. /**
  3. * @file            $HeadURL$
  4. * @version         $Id$
  5. * @author          $Author$
  6. * @package
  7. */

在windows下安装TortoiseSVN后
你可以在一个受控文件上右键->属性,然后到Subversion属性页
设置svn:keywords,根据你的需要选择Id,Url,Author,Date,Rev

设置后,提交这个文件,再打开就可以看到效果

  1. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  2. /**
  3. * @file            $HeadURL: svn://localhost/test/test4.php $
  4. * @version         $Id: test4.php 66 2007-01-11 08:41:22Z root $
  5. * @author          $Author: root $
  6. * @package
  7. */

但是这样单个文件操作太麻烦了,我们可以让svn自动帮我们处理。
右键->svn->seeting->general->Subversion configuation file: edit

  1. ### for 'svn add' and 'svn import', it defaults to 'no'.
  2. ### Automatic properties are defined in the section 'auto-props'.
  3. # enable-auto-props = yes

去掉enable-auto-props 前的#

  1. # Makefile = svn:eol-style=native

下增加
*.php = svn:eol-style=native;svn:keywords=Id Author Revision
这样对php文件就会自动处理Id Author Revision三个属性。

因为svn的属性保存在本地,所以开启后只对以后add或commit的文件有启,如果以后新增属性如:HeadURL,是无效果的。
同样以后关闭auto-props 对以前的文件也是没有影响的。

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply