当前位置: 首页 > news >正文

SVN pk CVS

版本控制工具SVN和CVS

<!--INVALID LISP CODE--><!-- Page published by Emacs Wiki begins here -->

CVS相信大家都听说过,不过这个广为使用的版本控制工具还有不少问题,包括中文支持和二进制文件的处理都有或多或少的问题。

现在好了,CVS的作者又为我们开发了SVN。Gnome和KDE的开发团队都已经换用SVN了,您为什么不试一下呢?

最基本的用法

建立代码库    svnadmin create /path/to/repos
导入数据      svn import /path/to/project file::///path/to/repos -m "initial import"
导出数据      svn checkout file::///path/to/repos
提交更新      svn commit filename
添加文件      svn add
删除文件      svn delele 
复制文件      svn copy
移动文件      svn move
查询状态      svn status
检查不同      svn diff
同步工作目录  svn update
合并代码      svn merge;svn resolve

SVN的相关资源

这里是SVN的项目网站。

<<Version Control with Subversion>>的电子书。

这里是繁体中文的SVN文档(只有部分被翻译过来了)。

不能不提的CVS

虽然我已经转入了SVN的阵营,但是CVS仍然是应用最为广泛的版本控制软件之一。这里收集了一些关于CVS的资源。

CVSD的安装与配置

CVS使用简介

(注:这是oscargreat整理的资料,我拿来用相信他不会介意:)

什么是CVS

CVS(Cocurrent Version Systems,并发版本系统)是一个C/S模式的版本控制系统,用于在软件开发过程中记录文件版本,协调开发人员保证文件同步,从而保证项目正确的进行并行开发,并支持版本回滚、bug 跟踪和补丁生成。使用CVS可以有效地对软件开发的源代码和开发文档进行统一的管理和组织。

CVS的工作模式:

CVS的基本工作模式如下:
                  CVS服务器(代码文档库)
                       /     |       \
    (版 本 同 步)   /      |        \
                  开发者1  开发者2   开发者3

CVS在服务器端维护代码文档库,不同的开发者在本地机器上建立对应代码树,并利用CVS保持本地代码文档同代码文档库的一致。当由于多个开发者对文件的同时修改造成本地与库中的代码文件冲突时,CVS报告并协助解决冲突代码的合并问题。普通开发者(非管理员)对CVS的使用流程如下所示:
    Check out(获取)  -------------------- Merge(合并)
          |         |                            ^
          v         v            Conflict(冲突)  |
    Modify(修改)-> Update(更新)   ----------------
      ^              |
      |              | No Conflict(无冲突)
      |              v
    Update(更新) <- Commit(提交)
                     |
                     v
            Export(导出)

check out命令只需在开始建立本地代码树时使用一次,其后更新本地代码则使用update命令。update命令比较服务器和本地代码库的区别,并把本地代码树中过时的文件自动更新。当完成对代码的修改之后,在提交代码之前同样需要使用update命令,以获取他人并行修改的的代码。如果出现冲突(即对同一文件同时进行了修改),CVS将在本地代码中把两者都保留并标记出来,要求开发者处理冲突。在冲突不存在或已解决的情况下,使用commit命令将服务器代码更新为本地代码。CVS要求为更改提供注释,并自动为更新的文件处理版本编号。当软件需要正式发布时,使用export命令导出不包含CVS设置信息的源代码树。

CVS的管理员还使用包括init, import, admin等命令对服务器和代码库进行配置和设置。

CVS在Linux下客户端的使用

Linux下的多种IDE/Editor,如Emacs,Eclipse等都对CVS提供了支持,但基于命令行的cvs操作是最为基本和灵活的。以下介绍CVS命令行的使用。

环境变量
CVSROOT     指定代码库的位置
        如果CVS代码库在本地机器上,可直接指定代码库的路径,如:
            export CVSROOT=/path/to/cvsroot
        如果CVS代码库在服务器上,则还需指定服务器位置,通信方式
        及用户等信息,格式为:
            CVSROOT=:method:username@cvs.server.address#port:/path/to/cvsroot
        例如:

            export CVSROOT=:ext:horn@166.111.55.119:/cvs/horn

        其中ext指定使用SSH协议,horn是有权访问服务器相应目录的
        用户。
        CVSROOT的值可以在命令行上用-d选项重新指定,如:
            cvs -d /cvs/horn update
CVS_RSH     指定客户端访问服务器的协议
        使用SSH协议时,可如下设置:
            export CVS_RSH=ssh
基本命令

cvs的命令行格式为:

        cvs [options] command [options] filename

具体参数可参考info cvs

cvs的命令如果不带参数,则总是以当前所在目录作为操作对象。

以下介绍基本命令:

init        CVS代码库的初始化,管理员使用。

            cvs -d /cvs/horn init

            将/cvs/horn初始化为一个代码库
import      导入一个项目/模块,管理员使用。

            cvs import -m "comments" project_name vendor_tag release_tag

            执行后,会将当前目录下所有文件及目录导入到
                /path/to/cvsroot/project_name
            目录下。
            vender_tag: 开发商标记
            release_tag: 初始版本标记
            -m 参数如果不加,则cvs会自动启动vi,要求输入注释。
            如:
            cd /home/horn/blob-2.05/
            cvs import blob Hornworks InitVersion
checkout/co 从服务器获取代码,在本地建立代码树

            cvs checkout project_name
update/up   将本地文件同步到最新的版本

            cvs update filename

            不指定文件名,cvs将当前目录下所有子目录下的文件。如前
            所述,在每天工作前和工作之后commit之前都应当update,以
            保证本地代码总是最新的,且和服务器的代码无冲突。
commit/ci   将修改同步到CVS库里

            cvs commit -m "write some comments here" file_name

            CVS的很多动作都是通过cvs commit进行最后确认并修改的。
            在确认的前,还需要用户填写修改注释,以帮助其他开发人员
            了解修改的原因。
add         向项目中添加文件/目录

            cvs add new_file

            添加文件之前应当首先创建文件,之后使用cvs add添加。添
            加文件的操作只有经过cvs commit之后才真正被添加到代码库
            中。对于图片,Word文档等非纯文本的项目,需要使用
                cvs add -kb
            选项按二进制文件方式导入(k表示扩展选项,b表示
            binary),否则有可能出现文件被破坏的情况。
remove/rm   从项目中删除文件

            cvs remove file_name

            删除时,应当先将某个源文件物理删除后,再使用remove命令。
            比如:

                rm file_name
                cvs remove file_name

            然后commit确认删除。
            也可以加上-f参数将两步合一:

            cvs remmove -f file_name
            cvs commit -m "why delete file"

            cvs不允许删除目录,空目录在update时会依选项自动忽略。
log/history 查看修改历史

            cvs log file_name
diff        查看文件不同版本的区别

            cvs diff -r1.3 -r1.5 file_name
            查看1.3版本何1.5版本的区别

            cvs diff file_name
            查看本地和库中文件的区别
tag         标记版本号

            cvs tag release_version

            CVS自动维护每个文件的版本号,文件每修改一次,则其版本
            号自动增加。此版本号不能用作阶段性发布使用。tag命令为
            当前目录下所有文件标记一个统一的发行版本号。
            如:
                cd blob/
                cvs tag 2.1.0-Hornworks

            tag命令应当由项目负责人统一指定和使用。
export      项目发布, 导出不带CVS目录的源文件
            本地代码树的每个目录下,CVS都创建了一个CVS/目录用于记
            录当前目录和CVS库之间的对应信息。export可以导出不包含
            CVS目录的代码树。

            cvs export -r release project_name
            导出版本号标记为 release的代码

            cvs export -D 20021023 project_name
            导出截至2002.10.23时最新的文件

相关文章:

  • java api接口怎么写_看看人家那后端API接口写的,那叫一个优雅
  • 彻底解决Symbian全屏显示问题
  • python与java后台_【Web后端工程师-Python/Java是做什么的】知乎2020年Web后端工程师-Python/Java岗位职责-看准网...
  • python os模块需要安装吗_Python模块常用的几种安装方式
  • python获取当前时间的函数_在Python中获取毫秒和微秒
  • 浅析互联网创新为电信业发展带来的启示
  • mysql replace函数_mysql数据库学习(第二十二篇)- 函数
  • 3G与WIMAX竞争中融合 终端内容趋同
  • word 正则表达式 替换_GVIM正则表达式
  • 书讯 -- Training Kit:SQL Server 2005 实作与维护 I II
  • 成功人生生涯规划精进要诀24条
  • 随机抽人名小程序_python小程序(3):turtle随机画心
  • 个人理财十大“通用”原则
  • c++ lambda函数_c++ functors 和 自定义比较函数
  • 人生理财的六个阶段详解
  • 《Java编程思想》读书笔记-对象导论
  • 11111111
  • 2017届校招提前批面试回顾
  • css布局,左右固定中间自适应实现
  • Laravel 菜鸟晋级之路
  • React组件设计模式(一)
  • tweak 支持第三方库
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vuex 笔记整理
  • 翻译--Thinking in React
  • 反思总结然后整装待发
  • 给初学者:JavaScript 中数组操作注意点
  • 回顾2016
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端技术周刊 2019-01-14:客户端存储
  • 悄悄地说一个bug
  • 如何利用MongoDB打造TOP榜小程序
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 原生Ajax
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (23)Linux的软硬连接
  • (搬运以学习)flask 上下文的实现
  • (待修改)PyG安装步骤
  • (二)斐波那契Fabonacci函数
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (全注解开发)学习Spring-MVC的第三天
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Linux下编译安装log4cxx
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net MVC + EF搭建学生管理系统
  • .Net 知识杂记
  • .NET4.0并行计算技术基础(1)
  • .net打印*三角形
  • .NET开发者必备的11款免费工具