svn是一个开放源代码的版本控制系统,它管理着随着时间改变的数据,这些数据存放在一个中央资料档案库中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧版本,或是浏览文件的变动历史。
1、SVN简介
· repository:源代码库,源代码统一存放的地方。
· Checkout:提取,我们可以从源代码库提取代码。
· Commit:提交,当修改了代码,我们可以提交到源代码库。
· Update:更新,当提取了一份源代码,更新一下就可以和代码库中的源代码同步。
如果两个程序员同时修改了同一个文件,SVN可以合并这两个程序员的改动。SVN管理源代码是以行为单位的,两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件冲突,需要手动确认。
2、SVN的主要功能
· 目录版本控制
SVN做了一个虚拟的版本控制文件系统,能够根据时间追踪整个目录的变动。目录和文件都能进行版本控制。
· 真实的版本历史
在SVN中,你可以增加(add)、删除(delete)、复制(copy)、重命名(rename),无论是文件还是目录,所有新加的文件都从一个新的、干净的版本开始。
· 自动提交
一个提交动作,不是全部更新到了档案库中。它允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
· 纳入版本控管的元数据
每一个文件目录都附有一组属性关键字并和属性值相关联。你可以创建、并存储任何你想要的key/value对。属性是随着时间来做版本控管的。
· 选择不同的网络层
SVN有一个轻量级的独立SVN服务器,使用的是自定义的通信协议,可以很容易地通过ssh以tunnel方式使用。
· 一致的数据处理方式
SVN使用二进制差异算法来表示文件的差异,它对文字与二进制文件都一视同仁,都以压缩形式存储在档案库中。
· 有效的分支与标签
SVN建立分支与标签的方法,就只是复制该项目,使用的方法类似于硬连接。
· SVN主要是一群共用的C程序库,具有定义完善的API,SVN便于维护。
3、SVN生命周期
· 创建版本库
版本库相当于一个集中的空间,用于存放开发者所有的工作成果。版本库不仅能存放文件,还包括了每次修改的历史。Create操作用来创建一个新的版本库。
· 检出
Checkout操作是用来从版本库创建一个工作副本,工作副本是开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。
· 更新
update用来更新版本库,这个操作将工作副本与版本库进行同步。
· 执行变更
检出之后,可以对文件进行变更操作,例如:编辑、添加、删除,这些操作会先被添加到待变更列表中,直到执行了commit操作才会真正执行变更。
· 复查变化
在commit提交之前复查一下修改是一个很好的习惯,Status(查看状态)操作列出了工作副本中所进行的变动,用来查看待变更列表。可以用diff操作查看这些变动的详细信息。
· 修复错误
Revert操作重置了对工作副本的修改,它可以实现版本回退,它可以重置一个或多个文件/目录,也可以重置整个工作副本。
· 解决冲突
Merge操作会自动处理可以安全合并的东西,其他的会被当作冲突。产生冲突的部分需要人为处理,Resolve操作用来帮助我们找出冲突并告诉版本库如何处理冲突。
· 提交更改
commit操作将更改从工作副本提交到版本库。这个操作会修改版本库的内容,commit操作是一个原子操作。
4、SVN查看历史信息
svn log #用来展示SVN的版本作者、日期、路径等等,可以显示所有的信息
svn log 文件路径 #查看某一个文件的版本信息
svn diff #用来显示特定修改的行级详细信息,查看历史修改详情
svn cat #将在特定版本的某文件显示在当前屏幕,检查一个过去版本,不查看它们的区别
svn list #显示一个目录或某一版本存在的文件,不下载文件到本地
5、SVN分支
分支其实就是主干线的一个copy版,分支也具有版本控制功能,并且和主干线相互独立。我们可以通过合并功能,将分支合并到主干线上,最后合并成一个项目。