一、简介
SVN是Subversion的简称,是一个开放源代码的版本控制系统,采用分支管理系统,说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的.
svn服务器有2种运行方式:独立服务器和借助apache运行.
访问方式:①URL访问②SVN客户端访问
基本使用流程:
二、基本概念
配置库( Repository ):SVN(subversion)是一种常用的配置管理工具,它的数据存储在一个有记忆功能的中央仓库(repository )里,记录每一次提交,包括增加、删除、修改。
工作副本(WorkSpace):是每个人的工作空间,它是每个程序员工作的地方,程序员从配置库拿到源代码,放在本地作为工作副本,在工作副本上进行查看、修改、编译、运行、测试等操作,并把新版本的代码从这里提交回配置库库中。
三、使用
CheckOut(检出)
1.新建一个空文件夹,比如:E:\Proj_trunk
2.在此目录中点击右键-> SVN Checkout...
版本库URL(需要检出的模块的访问路径)
检出至目录(工作副本的存放路径)
Fully recursive:全递归(默认选择):检出完整的目录树,包含所有的文件或子目录
Immediate children,including folders:直接子节点,包含文件夹:检出目录,包含其中的文件或子目录,但是不递归展开子目录
Only file chlidren:仅文件子节点:检出指定目录,包含所有文件,但是不检出任何子目录
Only this item:仅此项:只检出目录。不包含其中的文件或子目录
Update(更新)
作用:更新工作副本使其成为版本库中的最新版本。
SVN将显示出更新的文件和更新的次数。
ADD(添加)
选中文件/文件夹(在新文件/文件夹所在父文件夹点击右键)——在菜单中选择“添加Add”命令,不需要受SVN控制的文件请取消打钩。
Revert(还原)
作用:撤销本地所有未提交的修改。
注意:还没有执行Commit操作之前执行此命令才可以,否则无效。
Commit(提交)
对工作副本进行编辑后提交到SVN
在右键菜单中点击SVN Commit
提交前写好信息,点击确定
创建分支(Branch)
两种方式
1.在版本库浏览器中创建分支
2.在工作副本创建分支
权限控制
当进行提交文件操作的时候您将看到权限提示信息
输入您的用户名和密码
保存权限设置(见红圈) ,可以避免将来重复输入用户名和密码
删除认证数据
步骤:点击右键——选择设置——以保存数据——清除认证数据
Show log (显示日志)
冲突
什么是冲突
团队协同工作时,当多位团队成员同时修改同一个文件,造成本地文件与SVN系统中的文件版本不一致,而导致文件无法提交的情况
冲突的解决方法
使用工具解决冲突
用revert放弃所做的修改
关于冲突的建议
修改文件之前,先进行一次update操作
修改完成后,及时commit,不要在本地停留过长时间
在多位团队成员协作时,尽量修改自己撰写的部分
出现冲突很正常,可以通过前面的方法解决,不要相互覆盖
SVN客户端日常使用
GIT vs SVN
集中式与分布式
SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的版本控制器!这是两者之间最核心的区别。
SVN只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
Git每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
SVN
1)每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
2)获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
3)提交必须有网络连接(非本地版本库);
4)提交需要授权,如果没有写权限,提交会失败;
5)提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
6)冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决
好处:每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。
缺点:中央服务器的单点故障
GIT
1)Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
2)Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。
3)提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
4)甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
5)Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。
6)冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。
除此之外
1)Git也可以模拟集中式的工作模式
Git版本库统一放在服务器中
可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库
团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;
团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变
2)Git 的集中式工作模式非常灵活
你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库
你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交
Git提供rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动
3)Git有更多的工作模式可以选择,远非 Subversion能比的