什么时候会发生OttoiseSVN关键字替换?
关键字替换何时发生? 如何设置 我设置什么时候会发生OttoiseSVN关键字替换?,svn,tortoisesvn,Svn,Tortoisesvn,关键字替换何时发生? 如何设置 我设置svn:keywords属性 我将这些行放在1.txt中并提交 $Revision$ $Author$ Subversion在提交期间设置关键字。尝试一次svn更新,看看这是否能解决问题 Subversion关键字替换是服务器的一项功能。有关于它如何在中工作的文档。确保svn:keywords包含您需要的关键字,正确大写,空格分隔,并且没有美元符号。比如说 $ svn propset svn:keywords "Revision Author" myfil
svn:keywords
属性
我将这些行放在1.txt中并提交
$Revision$
$Author$
Subversion在提交期间设置关键字。尝试一次
svn更新
,看看这是否能解决问题
Subversion关键字替换是服务器的一项功能。有关于它如何在中工作的文档。确保svn:keywords
包含您需要的关键字,正确大写,空格分隔,并且没有美元符号。比如说
$ svn propset svn:keywords "Revision Author" myfile.txt
而不是
$ svn propset svn:keywords "revision author" myfile.txt # Wrong capitalization
$ svn propset svn:keywords "$Revision$ $Author$" myfile.txt # $ should not be included
$ svn propset svn:keywords "Revision Author" myfile.txt # No commas
现在我要说的是
RCS关键字是危险的 好吧,他们不会戳破你的眼睛的。但是,它们并不是那么有用,在发展中会引起各种各样的问题 创建了当前看到的关键字裁剪。RCS并没有一个完整的存储库概念,也没有一种简单的方法来查看诸如作者姓名或特定文件的RCS修订号之类的信息。关键字将支持这一点 Subversion不需要关键字,因为Subversion具有竞争存储库的概念。如果您正在编辑一个文件,并且想知道作者是谁,或者该文件的修订版本是什么,只需对该文件执行
svn info
然而,旧习惯很难改掉,Subversion将使您能够支持一些不那么糟糕的RCS关键字(它将不支持$Log$
,如果有人在提交注释中添加单词$Log$
,这可能会成为一个递归的噩梦。)因为一些经理(也称为“无知的奇迹”)坚持关键字很重要,如果版本控制系统不支持它们,那就没用了
那么,使用关键词有什么危害呢
想象你做了一个分支:
$ svn cp trunk/proj ../branches/2.3/proj
现在,稍后,您希望看到您对该分支所做的更改以及它与主干的区别:
$ svn diff $REPO/trunk/proj $REPO/branches/2.3/proj
嗯。。。看起来该分支上的每个文件都已更改。也许我应该做些改变
$ svn diff $REPO/trunk/proj/foo.txt $REPO/branches/2.3/proj/foo.txt
+ /trunk/proj/foo.txt
- /trunk/branches/2.3/proj/foo.txt
+ /* $Revision: 23293$ */
- /* $Revision: 25329$ */
哦。。。整个diff就是我在程序中嵌入的RCS关键字。现在,对于我来说,除了RCS关键字之外,根本没有办法知道哪些文件被实际更改了,哪些没有更改
顺便说一句,执行svn合并
,每个关键字更改都会显示为冲突。您将花费20分钟来处理这一冲突,结果是完全没有意义的,因为当您进行提交时,关键字将再次更改
因此,当您使用Subversion时,使用RCS关键字几乎没有什么好处,如果您确实使用它们,会带来很多痛苦
但是,如果我在颠覆之外呢?
是的,如果您在客户机系统上,RCS关键字用于确定文件的版本。实际上,RCSident
命令可以搜索一个特定的$Id$字符串。事实上,甚至还有一个名为ident
的特殊命令,允许您快速查看RCS ID。例如,我想知道我的/bin/ksh
中使用的修订版本:
$ ident /bin/ksh
/bin/ksh
$Id: enum (AT&T Research) 2008-01-08 $
$Id: type (AT&T Labs Research) 2008-01-08 $
$Id: type (AT&T Labs Research) 2008-07-01 $
$Id: test (AT&T Research) 2003-03-18 $
$Id: break (AT&T Research) 1999-04-07 $
$Id: continue (AT&T Research) 1999-04-07 $
$Id: alias (AT&T Research) 1999-07-07 $
$Id: builtin (AT&T Research) 2010-08-04 $
$Id: cd (AT&T Research) 1999-06-05 $
$Id: command (AT&T Research) 2003-08-01 $
$Id: (AT&T Research) 2000-04-02 $
$Id: eval (AT&T Research) 1999-07-07 $
$Id: exec (AT&T Research) 1999-07-10 $
$Id: exit (AT&T Research) 1999-07-07 $
$Id: export (AT&T Research) 1999-07-07 $
$Id: getopts (AT&T Research) 2005-01-01 $
$Id: bg (AT&T Research) 2000-04-02 $
$Id: fg (AT&T Research) 2000-04-02 $
$Id: disown (AT&T Research) 2000-04-02 $
$Id: jobs (AT&T Research) 2000-04-02 $
$Id: hist (AT&T Research) 2000-04-02 $
$Id: kill (AT&T Research) 1999-06-17 $
$Id: let (AT&T Research) 2000-04-02 $
$Id: print (AT&T Research) 2008-11-26 $
$Id: printf (AT&T Research) 2009-02-02 $
$Id: pwd (AT&T Research) 1999-06-07 $
$Id: read (AT&T Research) 2006-12-19 $
$Id: readonly (AT&T Research) 2008-06-16 $
$Id: return (AT&T Research) 1999-07-07 $
$Id: sh (AT&T Research) 93u 2011-02-08 $
$Id: set (AT&T Research) 1999-09-28 $
$Id: shift (AT&T Research) 1999-07-07 $
$Id: sleep (AT&T Research) 2009-03-12 $
$Id: trap (AT&T Research) 1999-07-17 $
$Id: typeset (AT&T Research) 2010-12-08 $
$Id: ulimit (AT&T Research) 2003-06-21 $
$Id: umask (AT&T Research) 1999-04-07 $
$Id: unset (AT&T Research) 1999-07-07 $
$Id: unalias (AT&T Research) 1999-07-07 $
$Id: wait (AT&T Research) 1999-06-17 $
$Id: whence (AT&T Research) 2007-04-24 $
$Id: regex (AT&T Research) 2010-09-22 $
$Id: basename (AT&T Research) 2010-05-06 $
$Id: cat (AT&T Research) 2010-04-11 $
$Id: chmod (AT&T Research) 2010-07-28 $
$Id: cmp (AT&T Research) 2010-04-11 $
$Id: cut (AT&T Research) 2010-08-11 $
$Id: dirname (AT&T Research) 2009-01-31 $
$Id: getconf (AT&T Research) 2008-04-24 $
$Id: head (AT&T Research) 2006-09-27 $
$Id: logname (AT&T Research) 1999-04-30 $
$Id: mkdir (AT&T Research) 2010-04-08 $
$Id: sync (AT&T Research) 2006-10-04 $
$Id: uname (AT&T Research) 2007-04-19 $
$Id: wc (AT&T Research) 2009-11-28 $
$Id: Version JM 93u 2011-02-08 $
$Id: libcoshell (AT&T Research) 2010-05-19 $
是的,那很有帮助
存在多个问题:
- 一个已编译的程序可能由几十个(如果不是几百个)单独的文件组成。从上面可以看出,在这些中使用RS关键字并没有多大帮助
- 编译后的代码优化了ID字符串
- 开发人员必须记住包含它
- 即使一切顺利,它也不会告诉你最有用的信息:我在看什么RELEASE。一个版本可能由多个文件、程序、配置文件等组成。它们相互作用。知道几个RCS关键字对你没有多大帮助。您需要整个版本的官方修订号,而不是单个文件的官方修订号
Jenkins Project: %JOB_NAME%
Jenkins Build: %BUILD_NUMBER%
Jenkins Project: foo-3.4
Jenkins Build: 233
当Jenkins进行构建时,它设置环境变量JOB\u NAME
和build\u NUMBER
。当我在Jenkins上进行构建时,我让Jenkins复制并过滤此文件,用实际的Jenkins作业和构建替换%…%
占位符:在我的Jenkins构建之后,文件将如下所示:
Jenkins Project: %JOB_NAME%
Jenkins Build: %BUILD_NUMBER%
Jenkins Project: foo-3.4
Jenkins Build: 233
这可能是我系统中某个地方的一个文件,或者我可以嵌入它,这样当用户查看“关于”框时,它就会显示出来。这可以追溯到我的软件包的官方版本。从那个官方版本中,我可以生成发行说明并查看发生了什么变化。我可以使用标记返回并获取整个项目和所有各种文件进行测试,以查看可能导致错误的原因。这比随机的Subversion版本号更有用。而且,我没有RCS关键字在Subversion中造成的缺点。Subversion在提交期间设置关键字。尝试一次
svn更新
,看看这是否能解决问题
Subversion关键字替换是服务器的一项功能。有关于它如何在中工作的文档。确保svn:keywords
包含您需要的关键字,正确大写,空格分隔,并且没有美元符号。比如说
$ svn propset svn:keywords "Revision Author" myfile.txt
而不是
$ svn propset svn:keywords "revision author" myfile.txt # Wrong capitalization
$ svn propset svn:keywords "$Revision$ $Author$" myfile.txt # $ should not be included
$ svn propset svn:keywords "Revision Author" myfile.txt # No commas
现在我要说的是
RCS关键字是危险的 好吧,他们不会戳破你的眼睛的。但是,它们并不是那么有用,在发展中会引起各种各样的问题 创建了当前看到的关键字裁剪。RCS并没有一个完整的存储库概念,也没有一种简单的方法来查看诸如作者姓名或特定文件的RCS修订号之类的信息。关键字将支持这一点 颠覆不是