Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134400
  • 博文数量: 51
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-21 12:33
文章分类

全部博文(51)

文章存档

2011年(1)

2010年(5)

2009年(1)

2008年(12)

2007年(32)

我的朋友

分类: LINUX

2007-07-21 14:54:59

CVS 使用流程

获得working copy

示例: cvs checkout pds
注: cvs用户必须首先获得working copy, 然后才能进行
    代码维护以及版本控制. 第一次checkout后, 使用
    cvs update同步文件.

与服务器同步文件

示例: cvs update
注:  同步所有文件包括子目录. 好习惯:先同步后修改

修改源文件

示例: cvs edit ppmp.c
注:  然后使用emacs或vi进行编辑

提交改动

示例: cvs commit -m "add pppd killing" ppmp.c
注:  -m 注释信息, 如果不指定, 则启动默认编辑器提示输入
     注释信息

查看修改历史和注释信息

示例: cvs log ppmp.c

查看状态

示例: cvs status -v ppmp.c
===================================================================
File: ppmp.c            Status: Up-to-date

   Working revision:    1.3
   Repository revision: 1.3     /home/cvsroot/pds/ppmp/ppmp.c,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)

   Existing Tags:
        pds                             (revision: 1.1.1.1)
        start                           (revision: 1.1.1.1)
        PDS_1_0                         (branch: 1.1.1)

status总共有四种状态:

Up-to-date: 表明ppmp.c是最新的.  
Locally Modified: 表明你曾经修改过ppmp.c,但还没有commit,比仓库里的新.  
Needing Patch: 表明别人已经修改过ppmp.c并且已commit了!仓库里的旧.  
Needs Merge: 表明你曾经修改ppmp.c,但是别人也修改了它,而且还提交了! 

添加文件和目录

示例: cvs add session.c
注:  对非文本文件,使用cvs add -kb
然后: cvs commit -m"add session Management" session.c

删除文件

示例: rm pppd_test.c
     cvs remove pppd_test.c
     cvs commit -m"delete pppd test" pppd_test.c

显示文件的每一行为谁所修改

- cvs annotate ppmp.c
  注:类似于ECMS的cmspr_ed

察看不同文件的区别

- cvs diff -c -u -C 50 -r1.1 -r1.3 ppmp.c
  注: 类似于ECMS的inspect

锁定分支

- cvs admin -l PDS_1_0 
  锁定分支PDS_1_0
- cvs admin -l
  锁定主分支
  当你锁定某个分支时,别人就不能往该分支上commit code了.
-cvs admin -u PDS_1_0
  解锁分支

CVS分支管理

创建分支

  • 设定milestone(即pds-1.0)
  cvs tag PDS_1_0 pds
  • 开始一个新的milestone, 标记2.0的开发
  cvs commit -r 2.0
  注:当前所有的文件的版本号必须低于2.0
  • 假如在开发pds-2.0时发现1.0有bug, 但2.0又不能用, 这时可以 从PDS_1_0导出一个分支:pds_1_0_b1.
  cvs rtag -b -r PDS_1_0 PDS_1_0_b1 pds 

分支并行开发

  • 在另外一个目录checkout出PDS_1_0_b1, 解决pds1.0中的bug
  cvs checkout -r PDS_1_0_b1
  • 切换working copy到指定的分支
  cvs update -r PDS_1_0_b1 pds

tag分支

- 在PDS_1_0_b1上fix bug后,标记一修正版本号
  cvs tag PDS_1_0_p1

合并分支

  • 如果这些bug在pds-2.0也存在,则需要合并分支PDS_1_0_b1到2.0
  cvs update -j PDS_1_0_b1
  cvs commit -m "include pds1.0 bug fix"
  
  注:改命令一定要在2.0的checkout目录里

  
     +-----+    +-----+    +-----+    +-----+    +-----+
     ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 2.0 !   <- 主干
     +-----+    +-----+    +-----+    +-----+    +-----+
                     !                           *
                     !                          *
                     !   +---------+    +---------+
     PDS_1_0_b1   -> +---! 1.2.2.1 !----! 1.2.2.2 !<-PDS_1_0_p1
                         +---------+    +---------+

再次合并分支

  • 假如在PDS_1_0_b1又发现了新的bug, 但是已经fix了, 并且已经标定 PDS_1_0_p2, 我们也希望把它合并到2.0中
  cvs update -j PDS_1_0_p1 -j PDS_1_0_b1

  它的意思是把PDS_1_0_p1(tag)到PDS_1_0_b1(分支)变化了的部分合并2.0中(主干)

     +-----+    +-----+    +-----+    +-----+    +-----+
     ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 2.0 !   <- 主干
     +-----+    +-----+    +-----+    +-----+    +-----+
                     !                               *
                     !                                *
                     !   +---------+    +---------+    +---------+
     PDS_1_0_b1   -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !<-PDS_1_0_p2
                         +---------+    +---------+    +---------+

提示:

  • 当commit文件时,可能会出现冲突(即多人修改同一文件的同一区域), 这时需要手动解决冲突
  <<<<<<<<<<< 
  printf("bye bye");
  ===========
  printf("hello world");
  >>>>>>>>>>> <1.15>
  • 命令缩写:
commit=>ci; update=>up; checkout=>co; remove=>rm; 
  • TAG和revision的关系
  file1   file2   file3   file4   file5

   1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
   1.2*-   1.2     1.2    -1.2*-
   1.3  \- 1.3*-   1.3   / 1.3
   1.4          \  1.4  /  1.4
                 \-1.5*-   1.5
                   1.6

CVS每分一次支,版本号增加2位

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