【3分钟带你学】SVN
SVN:Subversion
一、SVN 概述
1.SVN是什么?
SVN 是Subversion的简称,是一个开放源代码的 版本控制软件。
2.为什么使用SVN?
①多人协作开发(解决代码合并覆盖问题)
②版本回退(将一个或多个文件恢复到旧版本)
③查看修改历史(日志),方便领导把控开发进度
④异地协作
3.两个基本概念
版本库(项目仓库):
包含了所有的版本控制文件及其完整历史的数据库。版本库通常位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端提供需要的数据。
工作副本
这是实际工作的地方。每一个开发者在自己的电脑上都有属于自己的工作副本。可以通过Subversion客户端将最新的版本从版本库上取下来,在本地的副本上工作而不影响其他人,如果对更改满意就可以将其提交到版本库中。
4.实际项目中SVN执行流程
①安装svn服务器端软件、创建版本库并启动svn服务
②项目经理在个人电脑安装svn客户端软件
③从svn版本库检出工作副本:
(Checkout操作,下载所有的文件)。
④开发核心代码并提交到svn版本库,(使用commit提交操作)
⑤项目经理将svn版本库地址告知给其他成员并分配任务
版本库地址格式 svn://IP 如果版本库在本地 svn://localhost
⑥开发者(安装svn客户端软件)从svn版本库检出工作副本,开始开发。
⑦开发者将代码提交到svn版本库,当整个任务完成,告知项目经理开发完成。
⑧项目经理从svn版本库更新最新的代码到本地并检查,使用update更新操作。
二、SVN软件下载与安装
下载服务器端软件
服务器端软件SubVersion或VisualSVN(功能完全一致)
下载地址: SubVersion:https://www.collab.net/downloads/subversion
VisualSVN:http://www.visualsvn.com/
服务端软件下载地址
下载客户端软件
软件名称:TortoiseSVN
下载地址:http://tortoisesvn.net/downloads
安装较为简单,可自行百度
三、服务器操作
1.创建版本库
以博客项目为例,仓库地址:F:\svncangku\blog
打开cmd ,执行命令
svnadmin create F:\svncangku\blog
2,启动仓库
svnserve -d -r 仓库地址 -d(后台运行) -r(目录)
svnserve -d -r F:\svncangku\blog
执行结束,光标换行并持续闪烁,这叫“挂起”状态,表示Svn仓库服务已启动。
注意:不能关闭此窗口或者中断“挂起”状态,如果需要执行其他命令,重开一个窗口。
每次都要启动太麻烦了,可以创建自动启动服务“:
sc create svn binPath= "F:\Subversion\svnserve.exe -r F:\svncangku --service" start= auto
–service 说明其为服务项目
start= auto说明电脑开机就自动启动该服务
可以在计算机的服务界面查看相关服务(右键计算机-> 管理->服务)
3、设置仓库的匿名写权限
如果不限制使用者读写操作。要设置仓库的匿名写权限
在svnserve.conf主配置文件中修改匿名用户权限
anon-access = write
注意,svn默认匿名用户有读的权限
4、权限控制
Svn提供了一个可选的权限控制功能,可以限制用户的访问权限。
权限控制分为两部分:
认证(Authentication)和授权(Authorization)
认证文件:鉴别用户身份,可以设置用户名和密码(passwd)
授权文件:判断用户是否具备某种操作(读写)的权限(authz)
注意:版本库的配置文件,只对当前版本库生效,每个版本库都有自己的配置文件。
权限控制设置步骤:
①打开svnserve.conf,关闭匿名用户的访问权限(读写)
anon-access = none
②修改svnserve.conf
开启认证文件,
password-db = passwd
开启授权文件
authz-db = anthz
③打开passwd文件,设置用户名和密码
格式:用户名 = 密码
④打开authz文件,设置哪些用户具有哪些权限
可以给指定用户直接授权。也可以对用户进行分组,对分组统一授权
分组格式: 分组名称 = 用户名1,用户名2
指定仓库名称:如果使用单仓库。设置为[/],
如果使用多仓库,根据仓库名称设置[blog;/]
完成以上设置之后,重新在工作副本中,进行svn的相关操作,会提示需要先认证:
5.清除保存的认证信息
保存认证信息后,如果因为一些原因比如修改了密码,需要重新进行认证,需要先清除保存的认证信息才能打开认证界面,清除方式:
空白处右键 -> TortoiseSVN -> settings设置 打开设置界面,在左侧找到Saved Data点击
在右方找到Authentication data ,点击后面的清除按钮进行清除。
四、客户端操作
1.常用操作
客户端操作相对简单。一般有
Checkout检出操作指令:从版本库检出仓库项目文件,一般只在第一次从版本库下载代码时执行,一般在一个空目录中执行
Commit提交操作:将本地的更改提交到版本库。根据实际情况进行提交,一般在下班前至少提交一次。
Update更新操作:从版本库更新最新的文件,一般在上班后先执行一次,或者每次开发一个新的功能前执行一次。
Add添加:将一个新增的文件标记为已添加,会出现在提交列表并默认选中。
2.文件和目录的提交
可以对文件和目录单个进行添加和提交操作,也可以进行批量提交。
提交方式:在最顶层目录 空白处右键->SVN Commit 打开提交界面。手动选中要提交的文件,点击ok进行提交:
3.svn图标集
1)常规图标:当本地文件与服务器端文件完全同步时,系统显示常规图标
2)冲突图标:如果两个程序员同时修改同一个文件,系统在上传时就会显示冲突图标
3)已删除图标:服务器文件已删除,本地就会显示删除图标
4)增加图标:文件还未上传但是已经添加到上传的队列中
5)无版本控制图标:当前文件是新建的,还未上传
6)修改图标:如果本地文件有修改但未上传就显示修改图标
7)只读图标:服务器端文件如果设置为只读,客户端就显示只读图标
8)锁定图标:如果服务器端文件已锁定,本地就显示锁定图标
9)忽略图标:有的电脑图标可能不显示,如果某些文件与项目无关,可以添加到忽略列表
五、版本回退(重要)
回退方式:空白处右键 -> TortoiseSVN -> update to revision 更新至版本
可以直接输入版本号,或者点击show log去选中一个指定版本。
注意:版本回退功能,只是将本地工作副本中的内容,更新到了一个指定版本,svn版本库中还是有最新的代码。
版本回退功能,只用于获取某一个历史版本的代码,并且备份用于其他用途。
不要在版本回退后的历史版本中直接进行开发。可以先通过svn update指令更新到最新的代码,再进行开发。
六、版本冲突(重要)
在本地检出两个工作副本,两个人同时开发。两个工作副本先都更新最新的版本,然后先后更改代码并提交,svn会提示发生了冲突。
两个表现:一是发生冲突的文件中,包含了多个版本的代码
二是目录中发生冲突的文件多出来几个不同后缀版本的文件
发生冲突后必须先解决冲突然后再提交到版本库。
解决冲突方式:
>
①继续提交本地的修改,使用svn resolve操作
修改发生冲突的文件中的代码,保留指定的代码(删除冲突标记行)。
选中发生冲突的文件,右键-> TortoiseSVN -> resolve 解决 打开解决冲突界面
选中要解决冲突的文件,点击ok。将指定的文件设置为已解决状态,因冲突产生的多余的文件都被自动删除。
继续执行svn commit提交操作即可。
②放弃本地的修改,使用svn revert操作 将指定文件还原成最新版本
选中发生冲突的文件,右键->TortoiseSVN -> revert 还原 打开还原界面
选中要还原的文件,点击ok, 放弃本地的修改,并将指定文件变为最新版本。
冲突是发生在本地的工作副本的,版本库中并没有冲突。
七、钩子程序同步代码
Svn提供了一个钩子程序同步代码的功能,所谓的钩子程序,类似于数据库中的触发器,可以通过一些设置,每当svn版本库中有更新,则在指定服务器apache项目目录中自动执行svn update命令。
使用同步钩子(post-commit)的步骤:
① 在服务器端apache下创建一个文件夹用于接收同步数据
② 在本地和服务器端同时检出或者更新svn仓库最新数据
③打开服务器的Blog仓库,找到hooks钩子目录,新建post-commit.bat批处理文件,然后输出如下代码
SET SVN=”F:\Subversion\svn.exe” 设置svn指令目录
SET DIR=”F:\workspace\online” 设置需要同步的目录
SVN update %DIR% –username username –password password 使用update指令更新数据到同步目录