一. SVN 简单介绍
  Subversion(SVN) 是一个开源的版本号控制系?, 也是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库非常像一个普通的文件server, 只是它会记住每一次文件的变动。 这样你能够把档案恢复到旧的版本号, 或是浏览文件的变动历史。
  SVN中的一些概念 :
  (1). repository(源码库)
  源码统一存放的地方
  (2). Checkout (提取)
  当你手上没有源码的时候,你须要从repository checkout一份
  (3). Commit (提交)
  当你已经改动了代码,你须要Commit到repository
  (4). Update (更新)
  当你已经Checkout了一份源码, Update一下你能够和Repository上的源码同步,你手上的代码会有新的变更
  日常开发过程事实上是这种(如果你已经Checkout而且已经工作了几天):Update(获得新的代码) -->作出自己的改动并调试成功 --> Commit(大家能够看到你的改动了) 。
  假设两个程序猿同一时候改动了同一个文件呢,  SVN能够合并这两个程序猿的改动,实际上SVN管理源码是以行为单位的,是说两个程序猿仅仅要不是改动了同一行程序,SVN都会自己主动合并两种改动。假设是同一行,SVN会提示文件Confict, 冲突,须要手动确认。
  client软件:
  (1)Windows下经常使用的client软件经常使用TortoiseSVN。它是一个免费的开源的client。 下载地址:http://tortoisesvn.net/downloads.html
  (2)向Myeclipse,也有一些SVN的插件。
  Subversion提供下面主要功能:
  (1)文件夹版本号控制
  CVS 仅仅能跟踪单个文件的历史, 只是 Subversion 实作了一个 “虚拟” 的版本号控管文件系统, 可以依时间跟踪整个文件夹的变动。 文件夹和文件都能进行版本号控制。
  (2)真实的版本号历史
  自从CVS限制了文件的版本号记录,CVS并不支持那些可能发生在文件上,但会影响所在文件夹内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有相同名字可是没有继承老版本号历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你能够添加(add)、删除(delete)、复制(copy)和重命名(rename),不管是文件还是文件夹。全部的新加的文件都从一个新的、干净的版本号?始。
  (3)自己主动提交
  一个提交动作,不是所有更新到了档案库中,是全然不更新。这同意开发者以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
  (4)纳入版本号控管的元数据
  每个文件与文件夹都附有一?属性keyword并和属性值相关联。你能够创建, 并?存不论什么你想要的Key/Value对。 属性是随着时间来作版本号控管的, 像文件?容一样。
  (5)选择不同的网络层
  Subversion 有抽象的档案库存取概念, 能够让人非常easy地实作新的网络机制。 Subversion 能够作为一个扩展模块嵌入到Apache HTTP server中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了很多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。另一个轻量级的独立Subversionserver, 使用的是自己定义的通信协议, 能够非常easy地通过 ssh 以 tunnel 方式使用。
  (6)一致的数据处理方式
  Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都相同地以压缩形式储存在档案库中, 并且文件差异是以两个方向在网络上传输的。
  (7)有效的分支(branch)与标签(tag)
  在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 仅仅是复制该项目, 使用的方法相似于硬连接(hard-link)。 所以这些操作仅仅会花费非常小, 并且是固定的时间。
  (8)Hackability
  Subversion没有不论什么的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完好的API。这使得 Subversion 便于维护, 而且可被其他应用程序与程序语言使用。