规范的代码在开头往往都有作者、修改日期、版本号、原始位置等信息。 大多数开发者都习惯自己手工维护这些信息。现在告诉你一个好消息是,通过设置svn关键字属性:svn:keywords可以实现此目的,你再也不用手工维护了,svn会自动帮你维护。如何实现呢?有两个途径:
(一)用命令设置文件属性的方式
目前支持5个关键字:Date(修改时间)、Revision(版本)、Author(提交者)、HeadURL(库路径)、Id(前面4个的组合)
首先要告诉svn你这个文件需要替换关键字:
$ svn propset svn:keywords "Date Author" weather.txt
property 'svn:keywords' set on 'weather.txt'
$
上面命令设置了文件weather.txt的关键字属性。只要该文件中出现
$Date$ 和 $Author$ 字样都会被自动替换成修改时间和提交者用户名。
在文件weather.txt中添加如下字样测试:
$Date$
$Author$
ddddddddd
然后commit,再打开看看,变成了如下样式:
$Date:2008-06-17 06:08:43Z $
$Author: xuejiang $
ddddddddd
可见已被替换。
(二)用运行配置区进行设置
如果你觉得上面的操作太麻烦,希望所有的文件(某类型)都自动进行替换,而不是对每个文件都运行如上命令,那么你可以通过设置运行配置区来实现。
运行配置区分用户配置区和系统配置区。用户配置区只对用户的工作目录起作用,系统配置区对所有的svn库起作用,如果设置了系统配置区就不用每个人在自己的用户配置区中进行配置了。
用户配置区的设置目录在home个人主目录(类unix系统) ~/.subversion 下,有三个文件:config、servers、README.TXT
一般配置config文件就可以了。
系统配置区在服务器端的/etc/subversion 下,一般都需要手工创建这个目录,然后从个人配置区里面拷贝三个文件过来。
配置如下:
打开config文件:vi config
找到#enable-auto-props = yes 这一行,去掉前面的注释符“#”号;
然后在文件最后([auto-props]小节)添加一行:
*.php = svn:keywords=Id (这一行的意思是对所有php后缀文件设置Id关键字,你也可以设成其他关键字)
然后保存退出。
这时候就设置完了。
此时,所有新加的php文件,如果含有"$Id$"字符都会被替换。
Subversion 中可以使用的 Keyword 包括下面这些。
Id
这是一种综合的格式,例如“$Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $”。
LastChangedDate
最后被修改的时间,这个属性也可以缩写为 Date。
LastChangedBy
最后修改该源代码文件的用户名,这个属性也可以被缩写为 Author。
LastChangedRevision
最后修订的版本号,这个属性也可以被缩写为 Revision 或者 Rev。
HeadURL
该源代码文件所位于的 Repository 上的绝对 URL 地址,这个属性也可以被缩写为 URL。
此关键字作为文件属性存在,我们可以使用TortoiseSVN为特定的文件设置其svn:keywords
在文件上点鼠标右键,选择TortoiseSVN->Properties:
然后点击New新建属性,属性名选择svn:keywords,写入Id Revision DateAuthor:
现在,这个文件内容中,所有出现的$Author$、$Date$、$Revision$、$Id$将会被subversion替换为相应的作者、日期等信息。
这种方式在实际使用中会显得较为繁琐,因为需要针对每一个文件进行设置属性的操作。更常见的是,我们直接设置TortoiseSVN的配置文件,使它自动为某种文件类型设置这些属性。
我们打开TortoiseSVN设置界面:
然后点击Edit按钮,编辑Subversion configuration file:
1、在[miscellany]段中,找到"# enable-auto-props =yes",将其前面的注释"#"去掉,允许自动设置属性
2、在[auto-props]段后,加上文件类型的自动属性定义,如:
*.java =svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=DateRevision Author Id
*.h =svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=DateRevision Author Id
*.hpp =svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=DateRevision Author Id
*.c =svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=DateRevision Author Id
*.cpp =svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=DateRevision Author Id
保存并关闭文件。现在,所有.java、.h等源代码中出现的$Date$、$Revision$等字符串,都会被subversion替换为相应的信息。
在使用版本管理工具的时候,需要利用其keywords功能,自动生成版本,例如在python文件头部写上:
__version__ = "$Revision$"
为了实现上述功能,需要修改config文件,以使得使用subversion时,commit能自动替换相应的keywords,如Id、Author等。
解决办法:
1、对svn add和svn import进来的代码,可以修改~/.subversion/config文件,把enable-auto-props设置为yes,并修改auto-props节部分的内容,把你想要实现的代码类型添加进去:
*.php=svn:keywords:Id
这样就可以在PHP文件中使用Id关键字来替换相应信息。
2、对已经在库中的代码,可以使用如下命令:
svn propset svn:keywords "Id" yourcode.php
然后再进行commit时就可以自动处理了。
如果你安装了TSVN,那么右键->TSVN->Settings->General->Subversion里面有个subversion配置文件,你点编辑,就会打开svn的全局配置文件config;
全局config文件的位置:
Unix:
/etc/subversion/config
Windows:
%ALLUSERSPROFILE%\Application Data\Subversion\config
REGISTRY:HKLM\Software\Tigris.org\Subversion\Config
用户config文件的位置:
Unix:
~/.subversion/config
Windows:
%APPDATA%\Subversion\config
REGISTRY:HKCU\Software\Tigris.org\Subversion\Config
将config修改为:
[miscellany]
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* *.swp ~*
enable-auto-props = yes
use-commit-times = yes
[auto-props]
*.eant = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.ecf = svn:keywords=Author Date Id Revision;svn:eol-style=native
*.xace = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.ace = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.ecf = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.e = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.c = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.h = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.cpp = svn:keywords=Author Date ID Revision;svn:eol-style=native
Mak* = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.y = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.ge = svn:keywords=Author Date ID Revision;svn:eol-style=native
*.py = svn:keywords=Author Date ID Revision;svn:eol-style=native
tcf = svn:eol-style=native
output = svn:eol-style=native
output? = svn:eol-style=native