`
宋科明
  • 浏览: 99968 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CVS中增加目录及标签和分支

阅读更多

1.在cvs中增加目录.

如果要在CVS中增加一个目录层,而不是几个文件,有点麻烦,因为

 

 

 

 

 

 

 

增加操作不支持子目录。这种情况下,你要使用输入,就像创建新模块

 

 

 

 

 

 

 

1) 选择Create->Import module

菜单

 

 

 

 

 

 

 

2)

在弹出的文件对话框中,选择你要增加的目录,并使这个文件夹打

 

 

 

 

 

 

 

开。

 

 

 

 

 

 

 

3) WinCvs 然后试图辨别目录树中的任何二进制文件。如果弹出了筛选

 

 

 

 

 

 

 

窗口,确保提及的文件被正确地设置了文本或二进制。

 

 

 

 

 

 

 

4) Import settings

输入设置对话框,输入模块名和目录名。如果

 

 

 

 

 

 

 

模块名叫MyProject,你要输入的子目录为source/utils,在

Select

 

 

 

 

 

 

 

the module name...

模块名输入框中输入:MyProject/source/utils

 

 

 

 

 

 

 

5) Vendor tag

厂商标记栏输入你的名字或公司的名字(没有空格)

 

 

 

 

 

 

 

6) Release tag

发行版本标记栏输入start

 

 

 

 

 

 

 

7) 点击OK

按钮。

 

 

 

 

 

 

 

WinCvs 然后将整个目录结构输入到CVS 服务其中。注意在输入操作中对你

 

 

 

 

 

 

 

的本地文件没有任何改变。也就是说,在输入后,你的本地拷贝没有置于

 

 

 

 

 

 

 

版本控制下。在对你的版本控制源文件工作前,你需要作:

 

 

 

 

 

 

 

1) 移走你的原始目录,如用Windows 的资源管理器将工程的顶级目录

 

 

 

 

 

 

 

更名为*.old

 

 

 

 

 

 

 

2) WinCvs 中,选择你增加的目录,点击鼠标右键,选择

Update

 

 

 

 

 

 

 

selection

更新

 

 

 

 

 

 

 

3) 确信

Create missing directories that exist in the repository

 

 

 

 

 

 

 

被选中。

 

 

 

 

 

 

 

4) 点击OK 按钮。

 

 

 

 

 

 

 

WinCvs 就提供了最新置于版本控制下的目录层

2.1 统一版本
在开发过程中,不同文件的修改情况不一样,形成各个文件的版本都不同。
见下图。有的文件版本为1.6,有的为1.3,有的为1.2, 等等。
但是这时整个项目达到了某个稳定阶段,我们需要一个统一的固定版本(比如
2.0),所有文件的版本号都成为2.0, 不管它原来的版本号如何。下一阶段在这个
版本上继续工作。
统一提升Module 的版本,对于CVS 服务器运行在Linux 或者Unix 的情形,相
对容易一些。如果使用CVSNT 在Windows 下作为CVS 服务器,就比较麻烦,
因为CVSNT 自身还不够稳定。笔者探索出的统一版本的操作, 是在
WinCvs1.3.17.2 版本下的:
1) 在第一次从仓库中Checkout Module 的时候,在弹出的Checkout settings 对话
框中,选择Checkout option 子栏目,然后钩上”Rest any sticky tag/date/kopts”,
见下图。
2) 紧接着,对于工作目录中的根目录,做一次手动的Commit, 在Commit setting
对话框中,钩上“force commit”,见下图:
注意:当前只需要钩上“force commit”就可以了,不需选择其它选项。
3) 如果工作目录中还有子目录,一定要手动地去每个子目录做步骤2 同样的
“force commit”操作。步骤2 的操作之后,工作目录应该是这个样子:
也就是,所有的文件具有相同的版本号1.2,1.2 是WinCvs 自动给您的module
加的版本号,我们提升统一版本将在这个1.2 的基础上进行。
4) 做完前面的操作之后,就可以象平常一样对文件进行修改和提交了。改进后
的文件版本是WinCvs 自动管理的,为1.3, 1.4 等等。
5) 现在你想统一版本号了。操作过程:在左边窗口中,鼠标选择需要提升统一
版本的Module。
6) 使用Commit 操作(Ctrl+M 或者主菜单Modify->Commit),现在需要在Commit
settings 对话框的Commit options 栏目中,钩上“Force revision/branch”选项,
然后在它右边的编辑框中,输入你想提升的高版本号(例如2.0),注意这个
版本号应该大于工作目录下所有文件的版本号。操作见下图:
7) 执行完之后,我们看见工作目录变成下图的样子,所有文件的版本号变成2.0,
而且tag 也变成了“2.0”:
8) 我们需要把上述操作过程中产生的tag 去掉,以免影响今后的文件修改提交。
去掉tag 的方法是,选择左边窗口的Module, 执行一次同步操作(Update)。执
行Update 时,我们需要在弹出的”Update settings”对话框中,钩上“Reset any
sticky tag/date/k options”选项,见下图所示。
按“确定”按钮,这样,一次统一版本的行动就完成了。
注意,上述的操作,是在WinCvs1.3.17.2 版本下实施的。这个版本的WinCvs 自
带的CVSNT 版本为
Concurrent Versions System (CVSNT) 2.0.41a (client/server)
根据本人的测试,CVSNT 版本为2.0.51d 不支持上述统一版本的操作,可能是一
个Bug.
警示:
不要用2.0.51 版本的CVSNT,它不稳定。


2.2 创建标签(Tag)


标签(Tag),是CVS 中对文件版本的一种文字描述,使用它的原因是它能
够对版本进行有意义的表述,在版本控制中可以方便地存取。
例如,在开发过程中,某文件(或者整个Module)达到了稳定状态,此时
它的版本号假定为2.5,我们可以对这个文件(或者整个Module)加一个Tag,
名字叫”stable”,作为一个里程碑的标志。
加标签的操作方法:
先选择需要加标签的文件,文件夹或者Module, 然后在主菜单Modify 中,选择“create a tag on selection”。工具栏上也有相应的按钮,可以更直接地进行操作。在“Create tag settings”对话框中,填写要添加的tag,在本例子中是”stable”,如下图所示。
但是要注意,CVS 中,对tag 的限制比较严格:1. tag 起始字符只能是字母;
2. tag 只能由字母、数字、”-”和下划线“_”组成,不能含空格和点“.”。所以,这样的tag 是非法的:“2.5”(起始字符不是字母,而且含有“.”),”This version is ok”(含有空格)。
小提示
如果您要把版本号写到tag 里去,可用“_”取代“.”。例如,“1.2.17”变成“1_2_17”
标签“stable”所表述的其实就是版本2.5,这个事实在版本历史图中更为清晰,
见下图。
在上图中,我们可以看见,文件CguiEditView.cpp 的版本历史中,有许多tag, 例
如“stable”和“almost_done”。
那么,Tag 除了是某个版本的有意义别名之外,还有别的什么用呢?CVS 的一些
操作可以专门对指定的Tag 进行。例如,在Update 时,可以专门指定Update 指
定的Tag,
例如在下图中,我们选定一个文件之后,指定从仓库中Update Tag 为
“stable”的版本。
操作的结果如下图:
在Checkout Module 的操作中,也可以指定Checkout 特定tag 的版本。具体操作
是在Checkout settings 对话框中,填写指定的Tag.如下图所示:


2.3 创建分支(Branch)


为什么要创建分支?
软件项目开发过程中充满了各种不确定性,有时我们需要试探,有时我们需
要分心去照顾从前的版本。例如,下面是两个典型的例子:
1) 软件已经达到了一个相对稳定的状态。下一步是想试验加入一种新功能(新
特征,新算法等),但是对它没有信心,担心加入新内容之后,系统变得不稳
定,希望能方便地回到目前的稳定状态。当然,如果新内容加入之后,效果
不错,也希望在这个基础上继续开发。应该如何操作呢?
2) 软件1.0 已经发布了,目前的工作已经集中在版本2.0。但是,这时传来消息,
版本1.0 有一个严重的Bug,请问现在该怎么办?
在上述情形下,可通过创建分支(Branch)来处理。
分支是什么呢?版本控制系统的一个基本功能,就是把某些版本的变化与开
发主线分离起来。与开发主线分离的开发活动就叫分支(Branch)。分支能够解决
上面的两个问题。


创建分支的方法:
1)选定要创建分支的文件(或者子目录、甚至是整个Module)
2)选择主菜单Modify 下的create a branch
3)在create branch 对话框中,先钩上“Check that the files are unmodified before branching”,再在“new branch”编辑框中,填写分支名称。在我们的例子中, 我们选择了一个叫GuiButton.cpp 的文件,来示范分支操作。其实对于子目
录和整个Module,情形是类似的。我们创建的分支名叫”try_branch”。见下图。
分支名称字符串必须符合与tag 一致的要求,具体见本章3.2 节。
4)按“确定”按钮。这样,新的分支就创立了。
我们可以在版本历史图中,看一下新的分支是如何表示的:
的确,我们在文件GuiButton.cpp 的版本2.8 上,创建了分支“try_branch”。
下面,我们将离开主开发线(也就是上图v1.1->1.2->2.0->2.5->2.6->2.8 的那条主线),在分支try_branch 上进行工作。


2.4 进入分支工作


我们工作目录中,目前是存放着开发主线的文件。为了进入分支工作,就需
要清空主线文件,而把分支文件从远程仓库中下载到本地,然后我们就可以在分
支上进行工作。具体操作是:
1)鼠标选择左边窗口中的Module
2)进行Update 操作(Ctrl+U)
3)在Update settings 的对话框中,钩上“Create missing directories that exist in the repository”
4)在Update settings 的对话框中,选择“Update options”栏目中,钩上“Retrieve
rev./tag/branch”,并填写分支名“try_branch”,见下图。
5)按“确定”按钮。结果是,工作目录下,主线文件消失了,分支文件出现了,
见下图:
在本例子中,分支“try_branch”只有GuiButton.cpp 一个文件。
现在我们可以在分支中工作了,对GuiButton.cpp 文件进行多次修改,并且提交
修改(Commit),具体的修改和提交操作可见第二章相关内容。
由于多次修改,GuiButton.cpp 的版本历史图变成了下面的样子:
参照上图,我们在分支中,对GuiButton.cpp 进行了三次修改和提交,分别产生
了版本2.8.2.1, 2.8.2.2, 2.8.2.3。


2.5 从分支回到开发主线


从分支回到开发主线,对分支的工作有两种处理情形:
1)我们接受分支做的工作,需要把它带到主线上去,继续向前开发。这个把分
支工作带回开发主线的过程,CVS 的术语叫Merge(融合)。
2)我们不希望分支的工作影响原来主线的工作,不把分支的工作带到主线上来。
下面,我们就进行回到主线的操作:
1)选择左边窗口的Module
2)进行Update 操作(Ctrrl+U)
3)在Update settings 对话框中,钩上“Create missing directories that exist in the
repository ”
4)在Update settings 对话框中,钩上“Reset any sticky date/tag/'-k' options”。如
果不想Merge 分支的工作,直接跳到步骤6)
5)如果想接受分支工作,进行Merge,点击“Merge option”栏目,选择“Only
this rev./tag”,并填写要Merge 的分支名,见下图:
6)按“确定”按钮。
对于接受Merge 的情形,我们可以看到现在工作目录是这个样子:
WinCvs 信息输出窗口中,出现了merge 相关的内容:
RCS file: F:/CVSRoot/MyWork/GuiButton.cpp,v
retrieving revision 2.8
retrieving revision 2.8.2.3
Merging differences between 2.8 and 2.8.2.3 into GuiButton.cpp
句子“Merging differences between 2.8 and 2.8.2.3 into GuiButton.cpp”的意思就是,
对于文件GuiButton.cpp, 已经把版本2.8(主线)和版本2.8.2.3(分支)的内容结合起
来了。可以看到,文件GuiButton.cpp 图标变红了,表示它已经在主线版本2.8
基础上,进行了修改。
现在我们提交(Commit)这个修改,它的版本变成了2.9。版本2.9 是版本2.8
的内容与2.8.2.3 相融合的结果。让我们在版本历史图中,看看是否是这样:
在上面的图中,我们看到,开发主线已经从2.8 延长到了2.9,从分支版本2.8.2.3
到版本2.9,有一条红细线,这就是Merge 的结果了。
如果我们不选择Merge, 从分支版本2.8.2.3 到版本2.9 就没有红细线。


2.6 生成项目的ChangeLog


所谓Changelog,就是一个文件,它以文本的方式,按日描述一个Module 的变化
历史。Changelog 对开发非常有用,因为有了它,我们对项目每天的改动一目了
然。
生成Changelog 的操作:先选择左边窗口中的Module,然后选择主菜单
Macros->CVS->Build Changelog,如下图所示:
这样,WinCvs 就会在您的工作目录里,生成一个叫ChangeLog 的文件,打开它,
里面就是你项目的每日变化情况。下面是一个ChangeLog 例子:
2004-11-15 Coco
* GuiComboBoxExt.cpp 2.9:
删除了文件头的注释
* GuiADODB.cpp 2.9:
从分支中回来
* GuiComboBoxExt.cpp 2.10:
注释掉了OnCreate()
* GuiADODB.cpp [branch_single_file] 2.8.2.1:
在分支中,消除了注释行。
* GuiADODB.cpp [branch_single_file] 2.8.2.2:
加了一行。
2004-11-14 Coco
* 新添加的目录/Keydef.h 2.9:
merged from 2.5.2.4
在上面的例子中,记载了2004-11-14 日和15 日,名叫Coco 的开发者做的修改
详情。
那么,对于单个文件,能否构建类似的ChangeLog 呢?答案是肯定的。首先,
用鼠标选择一个文件。在主菜单Query 中,选择“Log…”菜单项。
这时,WinCvs 的信息输出窗口就会输出这个文件的详细情况和变化历史。仔细
阅读分析这些信息对于理解这个文件的变化很有好处。
本章我们学习了版本管理中一些比较复杂的功能,如提升版本、创建和使用Tag、
利用分支进行工作和创建ChangeLog 等。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics