什么时候会发生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关键字用于确定文件的版本。实际上,RCS
ident
命令可以搜索一个特定的$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构建,否则不会发布给客户。这包括不编译的JavaScript和Perl项目

我们创建某种类型的构建文件,它总是打包在我们的构建中。一个相当简单的例子可能如下所示:

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修订号之类的信息。关键字将支持这一点

颠覆不是