项目管理之CVS与SVN日常使用总结

开发 项目管理
本文我们将谈到CVS和SVN的日常使用,希望这些东西能方便大家更好的用好CVS和SVN,更好的做项目管理。

做了多时的软件开发项目管理,深知代码管理在软件项目开发的过程中的重要位置,于是想到把遇到的关于代码管理方面的经验和问题记下,以供日后补充参考。目前在这个领域运用最为广泛的莫过于CVS和SVN两者,在实际运用中发现其实他们都同样非常优秀,以下我总结一下 CVS 的日常使用(夹杂与 SVN 的对比):

日常运用 :

cvs init : CVS版本库的初始化
cvs import -m "write some comments here" project_name vendor_tag release_tag : 一个项目的***导入
cvs checkout(co) project_name : 将代码从CVS库里导出#与SVN同#
cvs update(up) file_name : 将文件同步到***的版本#与SVN同#
cvs update : 将当前目录同步到***的版本#与SVN同#
cvs commit(ci) -m "write some comments here" file_name : 确认修改写入到CVS库里#与SVN同#
cvs admin -m 1.3:"write some comments here" file_name : 修改某个版本注释
cvs add new_file : 创建好新文件后添加文件#与SVN同#
cvs add -kb new_file.gif : 按二进制文件方式导入#与SVN同#
cvs admin -kkv new_file.css : 改回ASCII文件方式导入
cvs ci -m "write some comments here" : 然后确认修改并注释#与SVN同#
cvs rm file_name : 将某个源文件物理删除后(删除后需要cvs ci -m "comments"一下)
cvs add dir_name : 添加目录#与SVN同#
cvs log file_name / cvs history file_name : 查看修改历史#与SVN同#
cvs diff(di) -r1.3 -r1.5 file_name : 查看当前文件不同版本的区别#与SVN同#
cvs diff file_name : 查看当前文件(可能已经修改了)和库中相应文件的区别#与SVN同#
* notice : cvs里没有cvs move或cvs rename,因为这两个操作是可以由先cvs remove old_file_name,然后cvs add new_file_name实现的。

项目发布导出不带CVS目录的源文件#与SVN同# :

cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name

多项目并发管理#与SVN不同#参考文件***的NOTICE# :

cvs tag release_1_0 : 建立版本里程碑
cvs commit -r 2 : 开始一个新的里程碑(标记所有文件开始进入2.x的开发)
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir : 版本分支的建立(在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支 release_1_0_patch)
cvs checkout -r release_1_0_patch : 一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题,而其他人员仍旧在项目的主干分支2.x上开发
cvs tag release_1_0_patch_1 : 在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号
cvs update -j release_1_0_patch_1 : 如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中

cvs (-d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot) login : 常见的登陆格式
cvs (-d xxx) passwd -a user_name : 添加用户
cvs (-d xxx) passwd -r system_user user_name : 绑定用户
cvs (-d xxx) passwd -X user_name : 删除用户
* notice : 也可以通过设置CVSROOT系统参数使得所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号
* notice : 将 $Id$ 加在程序文件开头的注释里是一个很好的习惯

CVSNT 里面还有一个问题就是:添加的用户登录时有可能出现 Fatal error, aborting. administrator: no such user 此类的错误,那么我们需要在CVSNT的Server Settings中把client user设置一下,一般设置成 administrator 即可。

目前 My Team 统一使用 Eclipse 开发工具,以下是一篇关于 Eclipse CVS 使用的文章,以供参考:http://www.eclipse.org/articles/article.php?file=Article-BranchingWithEclipseAndCVS/article1.html.

* notice : 注意右键菜单下面 Team/Compare with/Replace With 菜单的用法基本上就掌握了基本的 Eclipse CVS Plugin 的用法了~
* notice : svn的多任务管理与cvs不同,svn中的branch实际上是复制一份当前的repository,然后可以并行地分别修改。复制采用cheap copy机制,类似于unix系统中的硬链接,branch操作不会使repository所占用的空间倍增,花费的时间也是常数级别的。svn中没有单独的branch命令,通过svn copy来实现。

这里有一点容易让人糊涂,因为svn中的版本号都是指repository,所以不同branch的版本号是混合交叉的,比如trunk为r60,svn copy之后会创建r61的branch,对trunk修改后再commit就成了r62。

svn中的merge并非字面上所示的将两个分支归并到一起,而是diff-and-apply的意思,比较两个repository tree,并将他们的差异归并到working-copy中。这里merge并不区分两个repository tree是否处于不同的分支,也不会验证working-copy的源头,所以使用这个功能的时候要自己小心。

当我们创建了一个branch,并且对trunk和branch分别进行了比较大的修改,现在想要把branch中的修改归并到trunk中,此时应该 merge的对象并不是trunk和branch的***版本,而应该是branch的起始版本和***版本。因为merge实际上只是做一个diff,所以前者在将branch的修改归并到trunk的同时也让对trunk的修改丢失了。

原文链接:http://blog.csdn.net/shagoo/article/details/3975931

【编辑推荐】

  1. 专家在线答疑:如何进行SVN服务器端与Eclipse中的SVN客户端配置?
  2. SVN1.6服务端和客户端安装配置之专家指导
  3. SVN项目---目录布局详解
  4. 多项目中SVN权限管理精辟解析
  5. 两个简单操作介绍TortoiseSVN项目
责任编辑:彭凡 来源: CSDN博客
相关推荐

2010-05-19 16:57:49

SVN与CVS的区别

2010-05-28 15:14:20

SVN全称

2010-05-19 16:29:12

SVN与CVS的区别

2010-06-01 19:33:53

SVN与CVS优缺点

2010-05-19 16:45:26

2010-05-20 16:27:05

2010-05-19 15:57:38

CVS与SVN

2010-05-31 14:42:14

SVN与CVS优缺点

2010-05-28 14:57:42

SVN-Importe

2010-05-28 15:28:25

svn-importe

2012-02-02 16:58:02

Eclipse

2010-05-28 11:09:51

SVN功能

2010-05-19 16:15:05

SVN与CVS

2010-05-17 13:34:47

2010-05-24 13:45:49

Redmine中使用S

2011-09-19 09:30:09

项目设计

2010-05-25 15:22:30

NetBeans SV

2010-05-27 17:41:09

2011-08-11 11:15:52

XcodeSVN文件

2010-06-02 10:26:06

SVN源代码管理
点赞
收藏

51CTO技术栈公众号