为了让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编码,这样也可以尽量避免未来出现问题。
阅读(1877) | 评论(0) | 转发(0) |