【php精品源码栏目提醒】:网学会员鉴于大家对php精品源码十分关注,论文会员在此为大家搜集整理了“CVS操作文档nnmb - 计算机教材”一文,供大家参考学习
版本标签的检出 在checkout命令中使用-r选项可以检出一个模块某个版本的所有文件。
下面的命令可以很容易地检出模块tc 1.0.4版的所有源文件。
cvs checkout -r rel-0-4 tc 如果我们记得为最初的代码树加上的标签是“base”现在想要重新从最初的源代码树开始我们可以用如下命令签出“base”版本的代码 cvs checkout -r base community 或者如果我们当前编写的代码属于3.8版本那么可以用下面的命令为所有文件加上此时的标签 cvs tag release-38 cvs tag: Tagging . T functions.
php3 T index.
php3 T post.
php3 T read.
php3 T search.
php3 以后当我们想要获得“release-38”的文件时只需执行如下命令 cvs checkout -r release-38 community cvs checkout: Updating community U community/functions.
php3 U community/index.
php3 U community/post.
php3 U community/read.
php3 U community/search.
php3 U community/sql.
php3 另外我们也可以使用“cvs update”命令将现有版本跳转到该版本号对应的另一个版本上 cvs update -r release-38 community 也可根据时间获得特定版本 cvs update –D “2001-05-08” -D选项让CVS从仓库中找到2001年5月8日0时0分时的每个文件的最新版本将这些版本从仓库中取出。
2.3附着性标签sticky tags 有些版本编号包含了其他属性数据这种附着性标签主要用在 1版本分支版本分支标签在创建分支的时候与版本分支关联在一起并且在解除之前一直有效。
2保持某几个文件不改动有时候可能需要保持某几个文件目前版本一段时间可以用cvs update –r命令为文件建立附着性标签以后在这个目录下执行cvs update命令该文件都不会被修改。
类似的如果开发者希望检出某个日期时间点上的版本而不希望后来执行cvs update的时候这几个文件被更新就可以用cvs checkout –D 或者cvs update –D 来达到将该日期与该版本关联的目的。
对于这种老版本的修改和提交形成新版本可以使用下列方法 1逐个处理处理方法见版本的回退之方法一。
2导出代码一次处理所有文件。
首先解除附着性标签使用cvs update –A 取消所有附着性标签、版本号、日期等然后在一个临时目录下导出代码cvs export –D “2001-05-08” test最后将所有代码拷贝到原来目录下覆盖所有原来的文件cp –r 。
cvs export的使用见发布
源码export。
3用“-j”选项的CVS更新命令见版本回退之方法二。
2.4删除标签 通常不会去修改标签。
他们的存在是为了纪录
源码库的更新历史。
如果删除或修改本身就是违反了初衷。
如果使用的是临时标签或者误打了标签你也可以进行删除移动更名操作。
要删除标签在cvs tag或cvs rtag后面加上-d选项。
cvs tag –d BASELINE_1 对标签重命名 cvs tag –r BASELINE_1 BASELINE_2 cvs tag –d BASELINE_1 将非分支non-branch标签rel-0-4从模块tc上删除 cvs rtag -d rel-0-4 tc 2.5移动标签 移动一个标签是将这个名字赋给另外的版本。
例如stable标签现在是用在文件backend.c的版本1.4上我们想将它转到版本1.6上面。
在cvs tag or cvs rtag命令后面加上-F选项。
我们可以这样做 cvs tag -r 1.6 -F stable backend.c 2.6重命名标签 重命名一个标签是说给一个版本上的已有标签名改名。
例如有人将标签名写错了并要更正它希望其他人还没有使用这个错误的标签。
要改标签名先用带有-r选项的cvs rtag命令然后删除旧标签名注意该方法对分支标签无效。
改名后标签位置与原标签相同。
例如 cvs rtag -r old-name-0-4 rel-0-4 tc cvs rtag -d old-name-0-4 tc 警告删除、移动和重命名标签操作具有危险性他们会永久性的抹去历史纪录信息并且一旦出错无法恢复。
3、分支 版本分支是用户在一个主要版本序列上导出的一个辅助版本序列分支版本与主版本序列并存可以进行并行开发如果需要分支版本可以合并到主版本上。
版本分支是CVS最重要的特性之一也是最容易被错误使用的特性之一。
将一些不是很有把握而且会破坏整个项目的功能独立到一个分支上进行开发能发挥巨大的作用但是如果管理不善将导致重大的混乱。
CVS分支可以运用于诸如多小组人并行开发、清除发行版的臭虫、多平台客户并行开发、Nightly Build中。
CVS分支主要是用来修改工作拷贝的历史记录禁止不加分支就修改以前版本的信息。
建议每发布一次版本就建立一个分支。
在使用分支时严格遵循一下原则 u 尽量减少同时活跃的分支数以减少合并时出现冲突的可能性并尽量频繁地进行版本合并 u 尽量减少分支的层次 u 使用统一和有意义的标签来命名分支 u 指定专人负责版本分支的创建和管理。
3.1创建版本分支tag -b 创建版本分支有两种方法检出版本后创建和直接创建。
版本刚创建时分支版本的所有代码与这个分支基于的版本成为分支基点完全相同。
分支创建后分支标签与分支树的头部版本关联而不是与分支基点关联。
如果今后需要访问分支基点需要在创建分支的时候同时给主干代码树贴上一个便于标识的标签。
可以使用tag -b命令来给一个文件的某个版本分配一个符号化的名称对一些文件进行修改而不会影响主干当commit时。
CVS允许你修改代码到不同的开发线上这就是分支branch。
当你改变一个分支中的文件时这些更改不会出现在主开发主干main trunk和其它分支中。
从工作拷贝中检出一个版本的代码然后创建分支用tag –b例如 cvs checkout –r BASELINE_1 test cvs tag -b BASELINE_1_PATH test 这将基于当前的工作目录拷贝分离出一个分支并分配BASELINE_1_PATH名字给分支。
使用rtag命令可以直接在仓库中建立一个分支 cvs rtag -b -r BASELINE_1 BASELINE_1_PATH_2 test -r BASELINE_1说明这个分支是基于有BASELINE_1这个标签的文件对需要从老的版本分出一个分支很有用例如给以前一个认为稳定的发行版改bug。
3.2访问分支 你可以通过两种方式进入分支重新检出一份或是从现有的工作拷贝切换过去。
重新检出使用checkout命令并带上-r标识后面是这个分支的标笺tag名。
如 mkdir work cd work cvs checkout -r rel-1-0-patches tc 或者如果你已有了一个拷贝你可以使用update -r命令转到这个分支 cvs update -r rel-1-0-patches tc 一但你的工作拷贝已经转向一个特定的分支。
它将一直保持在这个分支内除非你又做了其它的操作。
3.3确定在那个分支上 cvs status -v backend.c File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.cv Sticky Tag: BASELINE_1_PATHbranch:1.1.2 Sticky Date: none Sticky Options: none 3.4版本分支的合并 版本的合并就是将不同版本的代码进行合并使得合并后的版本包括不同版本上所进行的所有工作。
使用cvs update -j命令将这些变更合并到工作目录。
然后你可以提交这个版本。
cvs update -j rel-1-0 print.c 每次将分支版本中的修改合并到主干版本的时候都是将分支基部到分支最新版本之间的全部修改都合并到主干版本上。
在合并时可能会发生冲突如果这种情况发生你可以在提交新版本之前解决它对冲突的处理见处理冲突conflict。
使用两个-j revision标志update和checkout命令能合并两个任意不同的版本的差异到你的工作目录。
cvs update -j 1.5 -j 1.3 backend.c 进行多次反复合并的一个技巧是在每次合并后将分支版本树再贴上标签。
这样每次合并时的分支版本都有标签可以标识这样就能只合并未被合并的内容。
注意你必须表达清楚你希望只合并未被合并的内容的意思。
这样需要使用两个“-j“参数。
CVS合并从第一个“-j”的版本到第二个“-j”版本的变化。
否则cvs可能试图合并你已经合并过的东西这可能写导致一些不希望发生的东西。
3.5以清除发行版本的臭虫为例说明分支、合并的全过程 1、在工作目录中检出最新的版本以及上次的发行版本 cvs checkout test cvs checkout –d test_old –r rel_2001_10_10 test 将上次的发现版本保存在test_old目录下。
2、创建bugfix分支 cd test_old cvs tag –b rel_2001_10_10-bugfix 3、转到分支版本上 cvs update –r rel_2001_10_10-bugfix 4、修改分支版本中的文件如test.c 5、提交bugfix分支版本 cvs commit –m”fixed bug no.12345” test.c 6、回到主干版本所在目录将分支版本合并到最新的主版本上 cd ../test cvs update -j rel_2001_10_10-bugfix test.c 7、最后将合并后的结果提交形成合并后的新版本 cvs commit –m”merged from branch rel_2001_10_10-bugfix” test.c 4、发布
源码export 对于开发者而言如果需要获取软件的源代码使用CVS的检出机制已经足够了。
但是对于普通用户而言他们没有必要学会使用CVS然后检出所有的源代码他们需要更加简单的办法直接获得打包的软件源代码。
CVS使用cvs export 供开发者将源代码输出到目录下。
不同的是cvs export取出的是一个干干净净的没有CVS痕迹的源代码目录树。
cvs export –r rel-1_0_0 –d test-1.0.1 test -d选项将输出文件保存为test-1.0.1的子目录里。