您的位置:首页 > 软件设计 > 其它 > 正文

svn的功能介绍

更多 时间:2013-11-10 类别:软件设计 浏览量:9093

svn的功能介绍

svn的功能介绍

什么是SVN(Subversion)?


有一个简单但不十分精确比喻:SVN = 版本控制+ 备份服务器


简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容。并且自动的赋予每次的变更一个版本。

通常,我们称用来存放上传档案的地方就做Repository。用中文来说,有点像是档案仓库的意思。不过,通常我们还是使用Repository这个名词。基本上,第一次我们需要有一个新增(add)档案的动作,将想要备份的档案放到Repository上面。日后,当您有任何修改时,都可以上传到Repository上面,上传已经存在且修改过的档案就叫做commit,也就是提交修改给SVN server的意思。针对每次的commit,SVN server都会赋予他一个新的版本。同时,也会把每次上传的时间记录下来。日后,因为某些因素,如果您需要从Repository下载曾经提交的档案。您可以直接选择取得最新的版本,也可以取得任何一个之前的版本。如果忘记了版本,还是可以靠记忆尝试取得某个日期的版本。

 

SVN与CVS优缺点

 

1 存储类型格式

 
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。


SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。


2 速度

 
CVS比较慢。
 

整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(完全备份所有的工作文件)。


3 标志&分支 
  

SVN把采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:现在分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。


4 元数据 
  

CVS只允许存储文件。 
SVN允许一个文件有任意多的可命名属性,功能十分完全。

 

5 文件类型 
  

CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。
SVN会关心所有的文件类型,不需要你来手工操作。

 

6 回滚 
  

CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。 
SVN不允许递交后回滚。建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)


7 事务 
 

CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN的确支持“零或一”事务原则,这是SVN的一大优势。

 

SVN相关的工具

SubVersion:实现服务系统的软件。

TortoiseSVN:是SVN客户端程序,为windows外壳程序集成到windows资源管理器和

文件管理系统的Subversion客户端。

SVNService.exe:是专为SubVersion开发的一个用来作为Win32服务挂接的入口程序。

AnkhSVN:是一个专为VisualStudio提供SVN的插件

 

SVN常用命令

 

1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
简写:svn co


2、往版本库中添加新的文件
svn add file

3、将改动的文件提交到版本库
svn commit -m “LogMessage” [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
简写:svn ci


4、加锁/解锁
svn lock -m “LockMessage” [--force] PATH
svn unlock PATH


5、更新到某个版本
svn update -r m path
简写:svn up


6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
2)svn status -v path(显示文件和子目录状态)
简写:svn st


7、删除文件
svn delete path -m “delete test fle”
简写:svn (del, remove, rm)


8、查看日志
svn log path

9、查看文件详细信息
svn info path

10、比较差异
svn diff path(将修改的文件与基础版本比较)
svn diff -r m:n path(对版本m和版本n比较差异)
简写:svn di


11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path

12、SVN 帮助
svn help
svn help ci

13、版本库下的文件和目录列表
svn list path 显示path目录下的所有属于版本库的文件和目录简写:svn ls

14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。


用法:
1、mkdir PATH...
每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
2、mkdir URL... 创建版本控制的目录。
每个以URL指定的目录,都会透过立即提交于仓库中创建。在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。
用法: revert PATH... 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录

16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
 

用法:
1、switch URL [PATH]
更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将 服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
2、switch --relocate FROM TO [PATH...]
改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动 (比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用 这个命令更新工作副本与仓库的对应关系。

17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH...

注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。
svn cat 目标[@版本]...如果指定了版本,将从指定的版本开始查找。

svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

标签:svn 版本控制