svn 常用命令

http://blog.csdn.net/yzhz  杨争  


        本人在在以前一篇文章"svn的最佳实践"介绍了使用svn进行版本控制的思想,本文进一步从实战的角度介绍如何使用svn,其中重点阐述了svn的一些重要概念,便于大家更好地理解svn,这样有利于指导我们的在实际开发过程中的svn操作。
 
一、svn版本号(revision number)
1、 SVN的修订版本号是基于整个版本库的,所以当你新建了一个svn版本库,从修订版本号0开始,每一次成功的提交(svn ci)版本号加1,不管这时你是新增还是删除文件,是在分支上还是在主干上。


2、一个修订版本号代表了版本库的一个快照。同一修订版本号的相同文件在不同版本树(主干、分支)上有可能是不一样的。
svn cat file:///"j:/yzrepos/test/trunk/f.txt" -r 19
f
svn cat file:///"j:/yzrepos/test/branches/0611/f.txt" -r 19
f
f1

3、工作拷贝并不一定对应版本库中的最新版本,除非是做了一次svn up,会使得工作拷贝中的所有文件的版本对应版本库的最新的同一修订版本。
svn status -v 工作拷贝中每个文件的版本号:
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

4、svn的每个版本已经包含了整个目录树的信息,所以我们可以svn up -r 19 file:///"j:/yzrepos/test/trunk/ 。


二、svn命令详解
 只介绍最常用的svn命令:
1、svn add
svn add *  新增当前目录下的所有文件,包括子目录下(子目录下的文件)

2、svn status
svn status 查看当前目录下所有文件和目录的状态,这条语句对我们了解当前工作拷贝中文件的状态非常有帮助。
? item  文件或目录item不在svn的控制中
M item  文件item的内容被修改
C item  文件item发生冲突
A item  文件、目录预定加入到版本库

svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

3、svn help <subcommand> 查看子命令的语法、参数以及说明。

4、svn log 查看log信息

svn log http://svn.example.com/repos/branches/20060411 可以查看该分支的所有历史log,包括该分支以前的主干的log日志,因为该分支是从主干copy过来的。
svn log --stop-on-copy http://svn.example.com/repos/branches/20060411 只查看该分支的历史log,不跨越不同的拷贝。
svn log http://svn.example.com/repos/trunk  只能查看该主干的历史log,而不能看分支的log。

5、svn switch 分支、主干之间的切换, 注意:切换时本地工作拷贝的修改将会保留,这有时候对于我们很重要哦。

6、大家要学会使用svn的命令,掌握它有助于我们更深入地了解svn,不要完全依赖svn的图形化工具。


三、合并
       合并的操作是版本控制中最基本,最重要,也是最容易出错的地方。
 svn merge -r 1:10 http://svn.example.com/repos/calc/trunk
       记住一句话就可以:该操作是将某个版本树(主干或者分支)上版本号为10与版本号为1的差异合并到当前工作拷贝中。
       三个点:当前你的工作拷贝,你需要把哪个版本树上哪两个版本号的差异合并到当前工作拷贝的版本中,要避免重复合并。
 
三、解决冲突:
       出现冲突的两种情况:
1、svn up的时候 工作拷贝和服务器在同一版本树,当工作拷贝的改动与服务器的改动冲突时,会出现冲突。
2、svn merge的时候 比如我们将分支上的某个初始版本2和最终版本3的差异合并到主干上,那么如果分支初始版本2和最终版本3的差异 与 主干当前最新版本4和主干版本2的差异有相同的改动,那么这些相同之处就会有冲突。
       出现冲突时,svn就会把冲突的文件标记C,同时生成三个临时文件,分别代表本地工作拷贝的最初版本,修改后的版本和从服务器取到的最新版本。
      解决完冲突后,然后调用svn resolved,svn会删除那三个临时文件。


四、分支

1、建立分支
(1) svn copy trunk branches/my-calc-branch
svn copy命令将trunk工作目录下的所有目录和文件拷贝到一个新的目录branhes/my-calc-branch下
(2) svn copy http://svn.example.com/repos/calc/trunk /
           http://svn.example.com/repos/calc/branches/my-calc-branch /
      -m "Creating a private branch of /calc/trunk."
这两种是有区别的,
前面是以当前工作拷贝为基础,后者以当前服务器的最新版本为基础。
前者copy后的目录并没有在版本库中,需要执行svn add和svn ci才到版本库中,后者直接在服务器的版本库中操作。

2、实际上svn中没有内在的分支概念—只有拷贝。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。 SVN 的主要功能(1)目录版本控制CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 虚拟 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。(2)真实的版本历史自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。(3)自动提交一个提交动作,不是全部更新到了档案库中,就是不完全更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。(4)纳入版本控管的元数据每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的,就像文件內容一样。(5)选择不同的网络层Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。(6)一致的数据处理方式Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。(7)有效的分支(branch)与标签(tag)在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。(8)HackabilitySubversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值