下一个: Log keyword, 上一个: Substitution modes, 上层: Keyword substitution
在一个包含第三方软件的销售商分支的仓库中,配置 CVS 使用本地的关键字代换 $Id$ 或 $Header$ 很有用处。 在一些真正的项目中有实例:$Xorg$、$XFree86$、$FreeBSD$、$NetBSD$、$OpenBSD$,甚至 $dotat$。 它的优点在于可以i在文件中包含本地的版本信息而不破坏上游版本信息(它们可能使用不同的 local keyword 或标准关键字)。 在这些场合中,希望能只使用配置的本地关键字而停用其它所有的关键字展开。
文件 CVSROOT/config 中的 KeywordExpand
选项可用于明确指定排除或包含某个关键字,或关键字列表。
该列表可包含配置的 LocalKeyword
。
KeywordExpand
选项后跟随 =
,其下一个字符可能是 i
来表示开始一个包含列表或是一个 e
来表示开始一个排除列表。
如果以下的行被加到 CVSROOT/config 文件中:
# Add a "MyBSD" keyword and restrict keyword # expansion LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD
则只有 $MyBSD$ 会被扩展。 可能用列表。 此例子:
# Add a "MyBSD" keyword and restrict keyword # expansion to the MyBSD, Name and Date keywords. LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD,Name,Date
将允许 $MyBSD$、$Name$ 和 $Date$ 被扩展。
也可以用以下的办法配置排除列表:
# Do not expand the non-RCS keyword CVSHeader KeywordExpand=eCVSHeader
这让 cvs 忽略新近引入的 $CVSHeader$ 关键字而保留其他的。 排除的项还可以包括 RCS 的关键字列表,但会令需要 RCS 关键字扩展的用户费解,所以要恰当设置以该法配置的仓库的用户期望。
如果要不扩展任何 RCS 关键字,并且不用任何地方的 -ko
标志,管理员可以在 CVSROOT/config 中添加下面这行禁用全部关键字扩展:
# Do not expand any RCS keywords KeywordExpand=i
这会使希望使用 $Id$ 这样的 RCS 关键字扩展的用户迷惑,所以要恰当设置如此配置的仓库的用户期望。
有一点要注意,针对 KeywordExpand
和 LocalKeyword
特性的补丁已经存在很长时间了。
但使用 tag=
和 tagexpand=
关键字的这些特点实现的补丁并不被识别。