分类: LINUX
2009-02-05 13:57:42
如果你要合并的文件中包含关键字(参阅 Keyword substitution),你会得到一大堆冲突,这是因为关键字与合并的版本关联。
因此,你需要在合并的命令行里面指定 `-kk'(参阅 Substitution modes) 开关。 用只替换关键字名而不是其展开的值的办法,这个选项确保正合并的版本互相是是相同的,从而避免产生假的冲突。
例如,假定你有一个这样的文件:
+---------+
_! 1.1.2.1 ! <- br1
/ +---------+
/
/
+-----+ +-----+
! 1.1 !----! 1.2 !
+-----+ +-----+
你的工作目录当前在树干上(版本 1.2)。 合并时会得到下面的信息:
$ cat file1
key $Revision: 1.2 $
. . .
$ cvs update -j br1
U file1
RCS file: /cvsroot/first-dir/file1,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into file1
rcsmerge: warning: conflicts during merge
$ cat file1
<<<<<<< file1
key $Revision: 1.2 $
=======
key $Revision: 1.1.2.1 $
>>>>>>> 1.1.2.1
. . .
产生这些信息是由于合并尝试将 1.1 与 1.1.2.1 之间的差异合并到你的工作目录。
因为版本关键字从 Revision: 1.1
变为 Revision: 1.1.2.1
,cvs 试图把该改变合并进你的工作目录,而与你的工作目录里已包含 Revision: 1.2
的事实冲突。
下面是使用 `-kk' 后的结果:
$ cat file1
key $Revision: 1.2 $
. . .
$ cvs update -kk -j br1
U file1
RCS file: /cvsroot/first-dir/file1,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into file1
$ cat file1
key $Revision$
. . .
这时在文件中 1.1 和 1.1.2.1 版本的关键字双双扩展为明码 Revision
,因此把它们之间的改变合并进工作目录不需要改变什么。
也就不会有冲突产生。
警告: 在 cvs 1.12.2 之前的版本中,合并时使用 `-kk' 会有严重的问题。 那就是 `-kk' 会跨越任何仓库中归档文件中设置的默认关键字扩展模式。 对一些用户很不幸,这会造成二进制文件(默认关键字扩展模式设置为 `-kb')的损坏。 因此,当仓库中包含二进制文件时,解决冲突必须使用手工修改的方法来替代合并命令中的 `-kk'。
在 cvs 1.12.2 之后的版本中,命令行对任何 cvs 命令提供的关键字扩展模式不再跨越为二进制文件设置的 `-kb' 关键字扩展模式,然而它还是将跨越其它默认关键字扩展模式。
现在即使仓库中包含二进制文件,你也可以在合并中安全地使用 `-kk' 来防止含有 RCS 关键字行的假性冲突。
每一个文件保存有一个默认的替换模式,每个文件的工作目录副本也有一个替换模式。
前者通过用 `-k' 选项的 cvs add
和 cvs admin
命令设置; 后者用 `-k' 或 `-A' 选项的 cvs checkout
或 cvs update
命令设置。
cvs diff
命令也有一个 `-k' 选项。
参阅 Binary files 和 Merging and keywords 获得这些例子。
可用的模式为:
$
Revision: 5.7 $
对于 Revision
关键字。
cvs admin -l
命令相关。
Revision
,生成的字符串是 $
Revision$
而不是 $
Revision: 5.7 $
。
这一选项在比较版本差异时忽略关键字替换的影响非常有用(参阅 Merging and keywords)。
Revision
,如果检入前字符串是 $
Revision: 1.1 $
,则生成的字串与以前相同而不会是 $
Revision: 5.7 $
。
cvs add
、cvs admin
或 cvs import
跨越。
Revision
,生成的字串是 5.7
,而不是 $
Revision: 5.7 $
。
这种方法有助于一些难以从 $
Revision: $
这样的字符串中剥去关键字分界符的编程语言生成文件。
但是,一旦删除关键字名,以后将不能执行关键字替换,所以应小心使用该选项。
通常将 `-kv' 选项与 cvs export
命令配合使用 —参阅 export。
但请注意,它不能正确导出的文件中的二进制文件。
使用 cvs 来存贮二进制文件有两个问题。 第一是默认情况下,cvs 将会在仓库的规范保存形式(只有换行符)和客户端使用的操作系统合适形式(例如 Windows NT 中回车符跟在换行符后面)之间进行行尾转换。
第二是一个二进制文件有可能会包含有看起来像关键字(参阅 Keyword substitution)的数据,所以关键字扩展必须关闭。
在一些 CVS 命令中使用的选项 `-kb',可以确保 cvs 不进行行尾转换和关键字扩展。
下面一个例子说明如何使用 `-kb' 标志创建一个新的文件:
$ echo '$Id$' > kotest
$ cvs add -kb -m"A test file" kotest
$ cvs ci -m"First checkin; contains a keyword" kotest
如果一个文件意外地没有用 `-kb' 添加,你可以使用 cvs admin
命令去恢复。
例如:
$ echo '$Id$' > kotest
$ cvs add -m"A test file" kotest
$ cvs ci -m"First checkin; contains a keyword" kotest
$ cvs admin -kb kotest
$ cvs update -A kotest
http://man.chinaunix.net/develop/cvsdoc_zh/
# For non-unix systems:
# Copy in a good copy of the file from outside CVS
$ cvs commit -m "make it binary" kotest
当你检入 kotest 文件时,这个文件不使用二进制形式保存,因为你并没有当成二进制文件检入。
cvs admin -kb
命令默认地为这文件设置关键字替换方法,但它并不改变你拥有的这个文件的工作副本。
如果你需要处理行尾(也就是说,你在一个非 unix 系统中使用 cvs),那么你需要检入文件的新副本,如上面 cvs commit
命令所示。
在 Unix 中可使用 cvs update -A
命令满足需要。
(注意,你可以使用 cvs log
检测文件的默认关键字替换模式,使用 cvs status
检测工作副本的关键字替换模式。)
虽然如此,在使用 cvs admin -k
来改变关键字扩展时,记住关键字扩展模式是不会受版本控制的。
这就是说,例如,如果你有一个旧版本的文本文件以及一个相同名字的新版本的二进制文件,cvs 没办法根据你要取出的版本取出文本模式或是二进制模式的文件。
现在还没有很好的办法解决这个问题。
你也可以设置默认值,让 cvs add
和 cvs import
根据名字来决定文件是否以二进制模式处理;例如,你可以让文件名以 `.exe' 结尾是二进制的。
参阅 Wrappers.
现在没有办法让 cvs 根据内容检测一个文件是否为二进制。
设计这样一个特性的主要困难是,二进制和非二进制文件之间的区别并非明确的,且使用的准则随操作系统而有很大的不同。
查看某个特定分支的变化:
/BUILDAREA/xgong/merge/egen_mods_murphy_cbport/src/egenera_scsi_cb> cvs -H log
Usage: cvs log [-lRhtNb] [-r[revisions]] [-d dates] [-s states]
[-w[logins]] [files...]
-l Local directory only, no recursion.
-b Only list revisions on the default branch.
-h Only print header.
-R Only print name of RCS file.
-t Only print header and descriptive text.
-N Do not list tags.
-S Do not print name/header if no revisions selected. -d, -r,
-s, & -w have little effect in conjunction with -b, -h, -R, and
-t without this option.
-r[revisions] A comma-separated list of revisions to print:
rev1:rev2 Between rev1 and rev2, including rev1 and rev2.
rev1::rev2 Between rev1 and rev2, excluding rev1.
rev: rev and following revisions on the same branch.
rev:: After rev on the same branch.
:rev rev and previous revisions on the same branch.
::rev rev and previous revisions on the same branch.
rev Just rev.
branch All revisions on the branch.
branch. The last revision on the branch.
-d dates A semicolon-separated list of dates
(D1
-w[logins] Only list revisions checked in by specified logins.
(Specify the --help global option for a list of other help options)
/BUILDAREA/xgong/merge/egen_mods_murphy_cbport/src/egenera_scsi_cb> cvs log -N -rBR_MURPHY_CBPORT_DEV giscsi_ifc.c
RCS file: /home/cvsroot/egen_mods/src/egenera_scsi_cb/giscsi_ifc.c,v
Working file: giscsi_ifc.c
head: 1.173
branch:
locks: strict
access list:
keyword substitution: kv
total revisions: 392; selected revisions: 9
description:
----------------------------
revision 1.138.4.22.2.9
date: 2009/02/09 08:33:16; author: array; state: Exp; lines: +41 -26
BUG ID: 25340;
Bug: 25340
Tracking tacket for merging Merging BR_MURPHY to BR_MURPHY_CBPORT_DEV
Change Description
----------------------------
revision 1.138.4.22.2.8
date: 2009/01/15 19:38:53; author: array; state: Exp; lines: +7 -8
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
Merge in changes done on chakotay.
----------------------------
revision 1.138.4.22.2.7
date: 2008/11/13 16:23:12; author: array; state: Exp; lines: +9 -1
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
Fixed some leaks.
----------------------------
revision 1.138.4.22.2.6
date: 2008/11/07 07:40:59; author: array; state: Exp; lines: +16 -16
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
port some missing code changes form CHAKOTAY
----------------------------
revision 1.138.4.22.2.5
date: 2008/11/03 19:19:16; author: array; state: Exp; lines: +59 -59
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
<1 or 2 line comments that address the solution, would appear in
release notes.>
----------------------------
revision 1.138.4.22.2.4
date: 2008/11/03 15:21:14; author: array; state: Exp; lines: +33 -20
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
Fixed some leaks.
----------------------------
revision 1.138.4.22.2.3
date: 2008/10/09 08:17:13; author: array; state: Exp; lines: +1 -4
BUG ID: 0;
No Bug Number Provided
Change Description
----------------------------
revision 1.138.4.22.2.2
date: 2008/09/23 09:09:53; author: array; state: Exp; lines: +1352 -583
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
port the kbuild to 2.6 and make some modules compiled passed
----------------------------
revision 1.138.4.22.2.1
date: 2008/09/16 08:45:51; author: array; state: Exp; lines: +609 -60
BUG ID: 24032;
Bug: 24032
Tracking ticket for Panware (PANManager 5.2) development
Change Description
fix KDB enter issue
=============================================================================