SVN——SVN的介绍

首先我先告诉大家SVN英文名是subversion,又叫代码托管平台,那它有什么作用吗?我们来看几个例子

  • 我负责的一个项目就要完成了,就在即将解放之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲,我一个学期的努力付之东流,如果我早点知道SVN这个牛逼的代码托管平台,我就可以把我的项目备份起来了
  • 我的这个项目中需要-一个很复杂的功能,小杨摸索了一个星期还是没有眉目,而且代码已经被改得面目全非。我在想如果早知道SVN这个牛逼的代码托管平台,我就可以代码还原
  • 我和小杨先后从文件服务器上下载了同一个文件: demo.java。 小杨在demo.java文件中的第30行声明了一个方法,叫count(),先保存到了文件服务器上;我在Analysis.java文件中的第50行声明了一一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方 法就只存在于 小杨的记忆中了,我就不知道这个方法,导致以后项目出错,我在想如果早知道SVN这个牛逼的代码托管平台,我就可以协同修改
  • 小杨其实是一位项目经理,我会告诉你他把每一个版本都保存一份吗?我会告诉你这些工程里其实有很多文件都是重复的吗?。。。。我在想如果早知道SVN这个牛逼的代码托管平台,我就可以多版本项目文件管理
  • 小杨的项目出了很多bug,他问了小黑,小红,都不承认自己干的,如果早知道SVN这个牛逼的代码托管平台,我就可以追溯问题代码的编写人和编写时间
  • 小杨和我最近喜欢上了一个女孩子,最后我成功的追到了那个女孩,结果一回头发现自己的代码被人给修改了,出现很多bug,如果我早点知道SVN这个牛逼的代码托管平台,我就可以把我的项目权限控制

备份,代码还原,协同修改,多版本项目文件管理,追溯问题代码的编写人和编写时间,权限控制就是SVN的作用

1:版本控制简介

  • 版本控制最初来源于工程设计领域,是维护工程蓝图的标准做 法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化, 以便将来查阅特定版本修订情况的系统。(一种思想)
  • Subversion 就是一款实现版本控制的工具软件,通常也称为版本控制器,简称 SVN。 Subversion 是 Apache 软件基金会组织下的一个项目。
  • Subversion 的优良特性
    • 目录版本控制 :CVS 只能追踪单个文件的历史,但是 Subversion 实现了一个“虚拟”文件系 统,可以追踪整个目录树的修改,文件和目录都是版本控制的,结果就是可以在 客户端对文件和目录执行移动和复制命令。
    • 原子提交 :提交要么完全进入版本库,要么一点都没有,这允许开发者以一个逻辑块提 交修改。
    • 版本控制的元数据 :每个文件和目录都有一组附加的“属性”,你可以发明和保存任意的键/值对, 属性也会像文件内容一样被纳入版本控制。
    • 可选的网络层: Subversion 在版本库访问方面有一个抽象概念,利于人们去实现新的网络机 制,Subversion 的“高级”服务器是 Apache 网络服务器的一个模块,使用 HTTP 的变种协议 WebDAV/DeltaV 通讯,这给了 Subversion 在稳定性和交互性方面很 大的好处,可以直接使用服务器的特性,例如认证、授权、传输压缩和版本库浏 览等等。也有一个轻型的,单独运行的 Subversion 服务器,这个服务器使用自 己的协议,可以轻松的用 SSH 封装。
    • 一致的数据处理: Subversion 使用二进制文件差异算法展现文件的区别,对于文本(人类可读) 和二进制(人类不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在 版本库中,差异在网络上双向传递。
    • 高效的分支和标签 :分支与标签的代价不与工程的大小成比例,Subversion 建立分支与标签时只 是复制项目,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少 并且相对固定的时间,以及很小的版本库空间。

2:SVN 的工作原理

采取客户端/服务器模式——在服务器的版本库中保存项目文 件的各个版本,所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。 SVN 支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最 新改变更新到服务器端而且后面的更新不会覆盖前面的更新,而是作为一个新 的版本被保存下来——SVN甚至支持将本地工作副本恢复为服务器端保存的某一 个历史版本
在这里插入图片描述

3:SVN 的基本介绍

  • 检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目 组后参与开发的第一步,只需执行一次。
  • 更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时或修改公共文件之前执行一次。
  • 提交(commit)将本地修改提交到服务器端。通常每天下班前或每实现一个 功能、完成一个模块时执行一次。