Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1072989
  • 博文数量: 77
  • 博客积分: 11498
  • 博客等级: 上将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 11:10
文章分类

全部博文(77)

文章存档

2011年(1)

2010年(16)

2009年(5)

2008年(55)

分类: 项目管理

2010-04-17 02:29:01

为了让svn在submit时自动把版本信息更新到源代码文件,决定试试svn:keywords。打开config文件(Windows平台文件位置:%APPDATA%\Subversion\config),修改如下:
[miscellany]
enable-auto-props = yes // 默认是没有打开的

[auto-props]
*.h = svn:keywords=Id    // 这几行是新添加的
*.inl = svn:keywords=Id
*.cpp = svn:keywords=Id

在源文件中,加入$Id$作为版本信息的点位符。submit,果然$Id$被替换为了版本信息。由于$Id$是显示的国际标准时区而不是本地时区。搜索发现$Date$用的是本地时间。于是,再次修改config文件,把Data等关键字添加上:
*.h = svn:keywords=Id Date Rev Author URL
*.inl = svn:keywords=Id Date Rev Author URL
*.cpp = svn:keywords=Id Date Rev Author URL

并修改源文件,使用$Date$等关键字。Submit后,却发现并没有替换。网上有人说,可能是文件变成二进制文件引起的,但发现并不是这个原因,因为只要换为$Id$就又可以替换了。尝试多种情况,无果。无奈,继续搜索。在svn的文档中找到这么一段:

enable-auto-props

This instructs Subversion to automatically set properties on newly added or imported files. The default value is no, so set this to yes to enable Auto-props. The auto-props section of this file specifies which properties are to be set on which files.


原因终于找到了!config中的配置仅能够在新添加文件时生效。此时,去检查发现,确实只有Id被添加在文件的属性中了,后来在config新添加的关键字都没有出现在这些文件的属性中。因此,只能够手动去为这些先前已经添加的文件添加关键字属性。

手动为这些文件添加好这些关键字属性后,submit,替换已经能够工作了。但却遇到了另外一个问题。由于我使用的VS生成的文件默认编码是gb2312的(与操作系统中的区域设置一致),而SVN的所有Log、属性等信息都是使用utf-8编码的。当svn把包括有汉字的时间信息(别忘了,$Date$返回的是本地区域的时间信息)替换源文件中的$Date$时,svn并没有去检测目标文件的编码,而是直接把utf-8编码的数据插入到了gb2312编码的文件中。于是,乱码出现了。

最后,我还是放弃了$Date$,回到了$Id$。并不是因为编码的问题,而是因为$Date$的信息太冗余了。另一方面,使用标准时区也有好处的,毕竟是标准时间嘛。对于编码的问题,为了更好的与svn协助,最终把所有文件模板转换成了UTF-8编码,这样也可以尽量避免未来出现问题。

阅读(1871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~