Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351657
  • 博文数量: 67
  • 博客积分: 2550
  • 博客等级: 少校
  • 技术积分: 990
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-17 18:24
文章分类

全部博文(67)

文章存档

2011年(6)

2010年(2)

2009年(40)

2008年(19)

我的朋友

分类: LINUX

2009-02-05 13:57:42

5.10 合并与关键字

如果你要合并的文件中包含关键字(参阅 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.1cvs 试图把该改变合并进你的工作目录,而与你的工作目录里已包含 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 addcvs admin 命令设置; 后者用 `-k' 或 `-A' 选项的 cvs checkoutcvs update 命令设置。 cvs diff 命令也有一个 `-k' 选项。 参阅 Binary filesMerging and keywords 获得这些例子。

可用的模式为:

`-kkv'
使用默认形式产生关键字字符串,如。 $Revision: 5.7 $ 对于 Revision 关键字。
`-kkvl'
类似 `-kkv',如果指定的版本现在被加锁,还需要插入加锁者的名字。 锁名与使用的 cvs admin -l 命令相关。
`-kk'
在关键字字符串中只生成关键字名;忽略其值。 例如,对于关键字 Revision,生成的字符串是 $Revision$ 而不是 $Revision: 5.7 $。 这一选项在比较版本差异时忽略关键字替换的影响非常有用(参阅 Merging and keywords)。
`-ko'
生成旧的关键字字符串,在工作中的文件与检入前一样。 例如:对于关键字 Revision,如果检入前字符串是 $Revision: 1.1 $,则生成的字串与以前相同而不会是 $Revision: 5.7 $
`-kb'
类似 `-ko' 选项,并阻止换行字符的转换,这种转换是因为换行符在仓库(只是换行) 的形式与客户机使用的操作系统不同。 对有些系统,比如 Unix,换行符就是行中止符,这样就和 `-ko' 没什么区别。 关于二进制文件的更多信息,参阅 Binary files。 在 cvs 版本 1.12.2 及之后的 `-kb',不会被在命令行中使用 `-k' 选项的 cvs addcvs admincvs import 跨越。
`-kv'
只为关键字符串生成关键字值。 例如,对于关键字 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 addcvs 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        -s states       Only list revisions with specified states.
        -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
=============================================================================


阅读(1502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~