`
jaindey
  • 浏览: 3599 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

CVS的$Id$自动替换在Subversion中的实现

    博客分类:
  • CVS
阅读更多
以前CVS用习惯了,换到Subversion中以后,$Id$不会自动替换感觉很不爽,后来一查文档,原来SVN用另外一个别扭的方式解决了这个问题。


1、打开 C:\Documents and Settings\QuietLife\Application Data\Subversion 文件夹(QuietLife 是我的用户名,换成自己的就行了);
2、找到 config 文件,用记事本打开;
3、加入下面的内容:

[miscellany]
enable-auto-props = yes

[auto-props]
*.c = svn:keywords=Id
*.cpp = svn:keywords=Id
*.h = svn:keywords=Id
*.hpp = svn:keywords=Id
*.cxx = svn:keywords=Id
*.cs = svn:keywords=Id
*.php = svn:keywords=Id
*.html = svn:keywords=Id
*.tpl = svn:keywords=Id
*.txt = svn:keywords=Id
*.vbs = svn:keywords=Id
*.js = svn:keywords=Id
*.asp = svn:keywords=Id

OK,现在试试看加入一个文件到 SVN 中,然后再提交。就会发现文件中的 $Id$ 已经被自动替换了,而且文件也自动加上了 keyword:Id 属性。

以上引自http://www.dualface.com/blog/2005/01/subversion.html,这样是使用了SVN的一个“自动属性”的功能,可以自动为文件设置属性,因为文件的性质定义全部都是用属性来实现的(项目也是)。并且不光有svn:keywords,还有其它的属性:

[auto-props]
### The format of the entries is:
### file-name-pattern = propname[=value][;propname[=value]…]
### The file-name-pattern can contain wildcards (such as ‘*’ and
### ‘?’). All entries which match will be applied to the file.
### Note that auto-props functionality must be enabled, which
### is typically done by setting the ‘enable-auto-props’ option.
# *.c = svn:eol-style=native
# *.cpp = svn:eol-style=native
# *.h = svn:eol-style=native
# *.dsp = svn:eol-style=CRLF
# *.dsw = svn:eol-style=CRLF
# *.sh = svn:eol-style=native;svn:executable
# *.txt = svn:eol-style=native
# *.png = svn:mime-type=image/png
# *.jpg = svn:mime-type=image/jpeg
# Makefile = svn:eol-style=native

顺便再引一些对这些属性的说明:

特殊性质

除了对你的目录与档案进行版本控制之外, Subversion 还提供了一个接口, 可用来新增, 修改, 以及移除已纳入版本控制的目录与档案的版本控制描述资料. 我们称这个描述资料为性质,在这里我主要介绍以下几个比较重要的特殊性质
svn:mime-type
svn:mime-type 性质在 Subversion 中有很多作用. 除了作为储存档案的多用途网际网络邮件延伸语法 (MIME) 分类之外, 这个性质的内容还会决定几项 Subversion 的行为特征.

个例子, 如果 svn:mime-type 性质设为文字的 MIME 类别 , Subversion
会假设该档的内容是二进制(也就是人类看不懂的资料). Subversion 提供的功能中, 其中一项是在从服务器收到工作档的更新中,
依文字内容与文字列进行合并. 但是对含有二进制资料的档案, 根本就没有 “文字列” 的概念. 因此, Subversion
对这些档案在更新时, 不会试着进行内文合并. 它改用另一种方式。
一般来说Subversion 在执行 svn import 与
svn add 子命令时, 会使用二进制侦测运算法的方式来协助使用者.但是如果 Subversion 猜错了, 或是你希望将
svn:mime-type 设定成更为明确的值(可能是 image/png)你都可以移除或是手动编辑这个性质.
svn:ignore
svn:ignore 性质包含了档案样式的列表, Subversion 处理时会忽略. 它可以与执行时期设定的 global-ignores 选项一起工作, 以便在类似 svn status 的命令中过滤掉未纳入版本控制的目录与档案.
我们知道新增的文件和目录必须透过 svn add 命令, 才会被纳入 Subversion 的管理. svn status 命令会将工作复本中未纳入版控制目录与档案显示出来.
$ svn status calc
M calc/button.c
? calc/calculator
? calc/data.c
? calc/debug_log
? calc/debug_log.1


这个范例中, 用?标注出来的文件就是未纳入版控制的档案.如果你不想每次执行 svn status 时, 都看到这些档案,
那幺svn:ignore 性质就是解决方案。你可以透过 svn propedit svn:ignore calc 对 calc
目录加上一些忽略样式. 举个例子,将以下的值作为 svn:ignore 性质的新内容:
calculator
debug_log*
加上这个性质后再执行你的 svn status 输出便会不同:
$ svn status
M calc
M calc/button.c
? calc/data.c
现在, 所有不想看到的东西都从输出中消失了!

svn:keywords
Subversion 具有取代关键词(有关纳入版本控制档案的有用信息)进入档案内容的功能.

个例子, 假设你有个文件, 想要在里面显示最近一次修改的日期. 你可以把这个负担加诸文件的作者身上, 让他们每一次送交更动之前,
顺便添加最近一次修改日期的部份. 但是迟早有人会忘记这件事. 换个方式, 只要叫 Subversion 对 LastChangedDate
关键词进行关键词取代即可.
Subversion 定义了可用来进行取代的关键词列表. 这个列表包含了以下五个关键词:
LastChangedDate
LastChangedRevision
LastChangedBy
HeadURL
Id
如果只把关键词定位锚加进档案里的话, 什幺事也不会发生.要告诉 Subversion 是否该对某一个档案进行关键词取代,得使用svn:keywords这个性质。当它被设定时, 它会控制该档案哪个关键词应该被取代.
举个例子, 假设你有一个纳入版本控制的档案, 名为 weather.txt, 看起来像这样:
Here is the latest report from the front lines.
$LastChangedDate$
$Rev$
Cumulus clouds are appearing more frequently as summer approaches.
如果没有设定该档案的 svn:keywords 性质, Subversion 什幺事也不会作. 让我们开启关键词 LastChangedDate 的内容取代.
$ svn propset svn:keywords "LastChangedDate Author" weather.txt
property `svn:keywords’ set on ‘weather.txt’
$
在你送交了这个性质更动之后, Subversion 会显示为:
Here is the latest report from the front lines.
$LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $
$Rev$
Cumulus clouds are appearing more frequently as summer approaches.
这样不管谁提交这个文件,都会在里面显示最近一次修改的日期。
svn:eol-style

非另外指定版本控制档案的 svn:mime-type 性质, Subversion 会假设档案包含人类可读的资料.这对于列尾符号 (EOL)
是很不幸地, 因为不同的操作系统会使用不同的符号来表示一列的结尾. 举个例子, 一般用在 Windows 平台上的列尾符号是两个 ASCII
控制字符 :返回字符 (CR) 与换行字符 (LF). 但是 Unix 软件就只使用 LF
字符来表示一列的结尾.这样以来window客户提交的档案中的CR 字符在 linux客户端会显示成 ^M, 而linux客户提交的档案中CR
字符在 Windows 客户端会被忽略。结果将档案里的所有文字列合并成一个超长的文字列,
这是因为没有返回CRLF字符组合的存在来表示一个换行。 解决的方法是 svn:eol-style 性质. 当这个性质设定为native时,
Subversion 会根据系统的类型来决定是否对该档案的结尾进行自动处理。.
svn:externals
有的时候,
一个工作复本可能包含了数个不同来源的工作复本. 举个例子, 你可能想要有数个不同的目录,
各来自不同的档案库.我们可以通过svn:externals 性质来宣告这一对对应关系。内容是子目录对应至 Subversion 档案库 URL
的多行表格.
$ svn propget svn:externals calc
third-party/sounds http://sounds.red-bean.com/repos
third-party/skins http://skins.red-bean.com/repositories/skinproj
third-party/skins/toolkit http://svn.red-bean.com/repos/skin-maker
当有人取出 calc 目录的工作复本, Subversion 还会继续取出在外部定义里的项目.
$ svn checkout http://svn.example.com/repos/calc
A calc
A calc/Makefile
A calc/integer.c
A calc/button.c
Checked out revision 148.

Fetching external item into calc/third-party/sounds
A calc/third-party/sounds/ding.ogg
A calc/third-party/sounds/dong.ogg
A calc/third-party/sounds/clang.ogg
Checked out revision 14.

Fetching external item into calc/third-party/skins
分享到:
评论

相关推荐

    Subversion与CVS的比较

    综上所述,Subversion在功能性和非功能性方面都超越了CVS,成为了现代版本控制系统中的佼佼者,特别是在大规模、分布式团队的协作中,其优势更为明显。随着开源软件的不断发展,Subversion将继续进化,以适应更加...

    cvs及Subversion相关资料

    在IT行业中,版本控制系统是软件开发团队协作的重要工具,它们帮助开发者管理代码的变更历史,协同工作,并确保项目的一致性和可追踪性。本资料主要关注两种常用的版本控制系统:CVS(Concurrent Versions System)...

    SubVersion and CVS 安装配置手册.rar

    对于Eclipse这样的集成开发环境(IDE),可以通过插件实现对SubVersion和CVS的支持。对于SubVersion,可以安装Subversive或Subclipse插件;对于CVS,Eclipse自带了内置支持,或者可以选择安装eCVS或CVSKit插件。这些...

    Eclipse中CVS使用

    CVS最初在UNIX/Linux环境中发展,如今已经成为许多Open Source项目首选的版本管理系统。它采用客户端/服务器架构,代码和文档的各个版本都存储在服务器上,开发者在本地工作并定期将更改提交至服务器,同时可以通过...

    在Eclipse中配置和使用CVS

    6. CVS TAG :开发人员可以使用 CVS TAG,将 $Id$ 加入代码注释中,方便开发过程的跟踪。 7. CVS vs VSS :开发人员和管理员可以了解 CVS 和 Virsual SourceSafe 的区别。 8. WinCVS:管理员可以使用 WinCVS ...

    CVS更改密码后,替换密码文件.rar

    在IT行业中,CVS(Concurrent Versions System)是一种版本控制系统,用于管理软件开发中的源代码和其他文件。这个压缩包“CVS更改密码后,替换密码文件.rar”显然与CVS系统的用户权限管理有关,特别是涉及到密码...

    CVS实现小组同步开发

    首先,我们需要在Eclipse中设置CVS服务器的连接信息。在创建新工程时,选择从CVS服务器导出,填写服务器的Host(如zhuazi.vicp.net)、Dir(/Main/accp)、user(test)、pass(test)和port(24013)。完成这些步骤...

    TortoiseCVS中文包

    "local"目录是用来存放用户自定义或本地化文件的地方,这样TortoiseCVS在运行时会自动检测并加载这个目录中的语言包。设置中选择"Window Default"(可能是描述文字有误,应该是“Windows默认”或者“中文”选项),...

    Tortoise CVS 中文语言包

    1. **集成在Windows资源管理器中**:TortoiseCVS将所有版本控制操作集成到文件资源管理器的右键菜单中,如添加、提交、更新、比较等,使得操作直观且易于上手。 2. **直观的图形界面**:TortoiseCVS提供了丰富的...

    CVS适用,及在MYECLISPE中发布

    ### CVS适用及其在MyEclipse中的发布 #### CVS简介与适用场景 CVS(Concurrent Versions System)是一种源代码版本控制系统,主要用于管理软件项目在开发过程中产生的多个版本。CVS支持多用户协作开发,能够有效地...

    解决CVS 中文乱码问题 一切OK

    在IT行业中,版本控制系统是开发团队协作的重要工具,其中CVS(Concurrent Versions System)是一个广泛应用的开源版本控制系统。然而,对于中文环境的用户来说,CVS在处理中文文件名或内容时可能会出现乱码问题,这...

    CVS完全手册--CVS一本通

    CVS支持关键词扩展,如`$Id$`、`$Revision$`,这些关键词在提交时会被自动替换为相应信息。 ### 分支管理 CVS允许创建分支,通过`-b`选项实现。分支管理使得并行开发和维护不同版本成为可能。 ### 安装与配置 - **...

    MyEclipse使用CVS

    在向导中,按照提示输入CVS服务器信息,选择要导入的项目,然后MyEclipse会自动从CVS仓库中检出代码并创建一个新的项目。 4. **版本控制操作** - **检入(Checkout)**:将CVS仓库中的代码检入到本地工作空间,可以...

    CVS 中文帮助手册 chm

    * CVS—协作版本系统 v1.12.13 * 1 概述 * 2 仓库 * 3 使用 CVS 开始一个项目 * 4 修订版 * 5 分支与合并 * 6 递归行为 * 7 添加、删除和重命名文件和目录 ...* 附录 H CVS 或本手册中的 bug * 索引

    在Eclipse中使用Subversion--Subclipse

    ### 在Eclipse中使用Subversion--Subclipse #### 核心知识点概述 1. **Eclipse与变更管理系统**:Eclipse作为一个广泛使用的开源集成开发环境(IDE),自诞生之初就内置了对CVS的支持,而随着Subversion(SVN)等...

    subversion

    ### Subversion (SVN) 在 Eclipse 中的应用及分支与合并详解 #### 一、Subversion 简介 Subversion,通常简称 SVN,是一种广泛使用的版本控制系统,它可以帮助团队管理和跟踪项目的开发历史。相比于早期的 CVS ...

    CVS中文使用手册PDF

    7. **CVS与MyEclipse集成**:MyEclipse是一款集成开发环境,手册可能会涵盖如何在MyEclipse中集成CVS,实现无缝的版本控制体验。 8. **错误处理与调试**:在使用过程中遇到的问题及解决方案,如何查看和理解CVS的...

    在Eclipse中使用CVS

    ### 在Eclipse中使用CVS #### 一、CVS简介 CVS,全称Concurrent Versions System(并发版本系统),是一种广泛应用于软件开发领域的版本控制系统。作为一个开源项目,CVS因其灵活性和可靠性而在众多开源项目中得到...

    linux服务器端和windows客户端cvs.rar

    在Linux服务器端和Windows客户端环境中使用CVS,可以实现跨平台的协作开发。下面将详细介绍如何在Linux服务器上设置CVS服务器,并在Windows客户端上安装并配置CVS客户端。 一、Linux服务器端CVS服务器的安装与配置 ...

Global site tag (gtag.js) - Google Analytics