`
宋科明
  • 浏览: 101676 次
  • 性别: 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 等。

分享到:
评论

相关推荐

    CVS 使用注意及原则

    在描述中提到了CVS服务器和客户端版本的兼容问题,例如,CVS v1.11.13与WinCVS v1.3.15.1 beta 15可以协同工作。在升级或更换客户端时,应测试新版本是否能顺利与服务器端配合,避免因版本不匹配导致的问题。此外,...

    cvs

    cvsnt是cvs的一个分支,增加了许多改进和特性,如Windows用户界面的增强,更强大的权限管理,以及对NTFS文件系统的支持。cvsnt-2.0.41.exe很可能是该版本的安装程序,用于在Windows环境中安装cvs服务器和客户端。而...

    TortoiseCVS和TortoiseSVN使用手册

    4. **分支与标签**:TortoiseSVN支持分支和标签,分支允许平行开发,而标签用于标记特定版本,避免对主分支的直接修改。 三、两者对比与选择 1. **适用场景**:TortoiseCVS适合已习惯CVS工作流程的团队,而...

    CVS和Nightly Build技术

    7. 文件操作:CVS能够处理目录和文件的增加、删除、移动以及重命名等操作。 8. 安全性:CVS还提供了加密连接和密码保护等安全机制,以防止未授权的访问和数据泄露。 9. 增强工具:CVS具备多种扩展工具和插件,这些...

    eclipse下cvs使用

    - **同步操作**:在执行标签或分支操作前,确保本地文件与CVS资源库同步。 - **权限管理**:注意CVS服务器上的用户权限配置,确保操作合法性。 - **备份与灾难恢复**:定期备份CVS仓库,以防数据丢失。 通过上述...

    SVN and CVS

    2. **标签和分支**:支持代码标记和分支,便于版本管理和协同。 3. **冲突解决**:在合并时自动检测并解决冲突。 4. **命令行驱动**:主要通过命令行工具进行操作,尽管也有图形界面工具,如KDE的KCVS和Windows的...

    [CVS服务器]cvsnt-2.5.04.2878-3236

    CVS是一种广泛使用的开源工具,它允许开发团队协同工作,管理项目中的文件和代码更改历史。cvsnt是CVS的Windows NT/2000/XP/2003/Vista/7/8/10/2008/2012/2016的增强版本,提供更多的功能和改进。 CVS的核心功能...

    CVS用户指南

    - 在WinCVS中选择项目目录,使用`Import`功能上传模块。 - 需要指定模块名称、存储位置和导入方式。 **3.2 拥有者下载所属模块** - **下载流程**: - 模块拥有者可通过`Checkout`命令获取最新版本的代码。 - 检...

    Linux常用工具速查实用手册第8章-项目管理工具.pptx

    4. **Subversion (SVN)** 是作为CVS的升级版出现的,它修复了CVS的一些问题,并增加了许多新特性,如统一的版本号、真实的版本历史、原子提交、空间节省、可选的网络层、优化的数据库、高效的分支和标签操作、以及跨...

    WinCVS与CVSNT 使用简介.doc

    CVS(Concurrent Versions System)是一种开源的版本控制系统,能够跟踪文件和目录的变更历史,便于多人协作开发。在Linux和Windows系统中均有可用版本。在国内,虽然多数教程侧重于Linux环境,但Windows平台的应用...

    Mini Version Control

    版本控制系统是软件开发中不可或缺的工具,它能够跟踪文件和目录的变化,便于团队协作和代码管理。"Mini Version Control"(MVCS)是一款专为Windows环境设计的小型版本控制系统,由个人开发者用脚本语言编写,虽然...

    git使用操作中文手册

    总结了分支管理的关键技术和最佳实践。 #### 四、服务器上的Git **4.1 协议** - **4.1.1 本地协议** 介绍本地协议的优势和局限。 - **4.1.2 SSH协议** 解释SSH协议的特点和优缺点。 - **4.1.3 Git协议** 详述...

    SVN使用教程

    - **高效分支和标签**:分支和标签操作开销小,不随项目规模增加而显著增长,这促进了敏捷开发中的频繁分支和合并。 **SVN的工作原理** SVN采用客户端/服务器架构,项目文件的各个版本存储在服务器上的版本库中,...

    Subversion 培训教材

    与CVS不同,Subversion可以跟踪目录树的变更,包括文件和目录的重命名或移动,这使得目录管理更为灵活。 在权限管理方面,Subversion提供了目录级别的权限控制,与CVS的模块级管理相比更便于团队协作。此外,...

    cvsnt2.5.04

    - **版本管理**:CVSNT允许用户跟踪文件和目录的修改历史,支持多用户同时编辑同一文件,避免冲突。 - **分支与合并**:通过创建分支,团队成员可以独立开发,然后将改动合并到主分支,实现并行开发。 - **标签...

    深入浅出系列之二_SubVersion

    除了提供常见的版本控制功能,如比较、修补、标记、提交、回复和分支外,SubVersion还增加了追踪移动和删除的能力。这一点对于保持文件的历史记录非常重要,尤其是在文件被重命名或移动的情况下。 ##### 2.3 支持...

    rxvt-unicode:我的Git镜像存储库,它每24小时保持同步一次官方CVS存储库

    CVS是一种早期的版本控制系统,用于跟踪文件和目录的变更,便于多人协作开发。虽然现在已经被更现代的Git系统所取代,但仍有部分项目使用CVS。Git是一种分布式版本控制系统,它的优势在于速度、数据完整性以及支持非...

Global site tag (gtag.js) - Google Analytics