SVN实践笔记(理论概念)--版本控制

前言

版本控制工具就是记录项目代码文件夹和文件的每个改动,并为每次改动编上序号(也叫版本号),用于存储,跟踪文件夹和文件的修改历史的工具。经过版本控制,能够恢复文件的旧版本并查看历史-谁在什么时间如何进行的修改。html

目前主流的版本控制工具:Git和VSN。本学习笔记是SVN学习笔记,由于我在的公司就用这个。linux

SVN实践笔记

第一章 对于SVN的一些观念

1.1 SVN概述

SVN是Subversion的简称,是一个开放源代码的版本控制系统,是用于多我的共同开发同一个项目,共用资源的目的。程序员

版本库:Subversion使用集中的数据库,它包含了全部的版本控制文件及其完整历史。这个数据库就是版本库。版本库一般位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端提供须要的数据。sql

工做副本:这是实际工做的地方。每个开发者在本身的电脑上都有属于本身的工做副本。能够经过Subversion客户端将最新的版本从版本库上取下来,在本地的副本上工做而不影响其余人,若是对更改满意就能够将其提交到版本库中。数据库

1.2 SVN工做流程

1.搭建svn服务器:安装服务器端软件、建立项目仓库、启动仓库服务apache

2.在我的开发电脑,安装svn客户端软件windows

3.建立项目目录,经过checkout检出操做,与svn版本库创建链接,下载全部的代码服务器

4.平常开发,经过commit提交操做,将本地的修改,提交到svn版本库svn

5.其余人提交过代码,能够经过update更新操做,将版本库中最新的代码(被修改部分)更新到本地。工具

注意:svn服务器的地址 svn://IP , 由服务器搭建服务器的ip地址和相关目录组成,由搭建者管理

1.3 SVN优点(强项)

1.多人协做开发(解决代码合并覆盖问题)

2.版本退回(将一个或多个文件恢复到旧版本)

3.查看修改历史(日志),方便把控开发进度

1.4 SVN工做原理

SVN工做原理解析图

第二章 SVN服务器端经常使用操做之建立仓库和创建链接

2.1 建立 SVN项目(仓库)

建立svn版本库命令:svnadmin create "仓库地址"

在Windows中打开cmd输入命令执行便可。

执行命令成功后,仓库地址中建立好相应的仓库文件夹。

Linux服务器上经过命令行就能建立,而Windows中有时候执行命令会出现错误。解决方式有:

1.将svn服务器端安装目录设置到环境变量中

2.将svnadmin.exe拖到命令行窗口或者书写完整路径,加上 create “仓库地址” 执行

2.2 启动仓库服务

使用SVN版本库前要启动SVN仓库服务,命令是:svnserve -d -r "仓库地址"

执行成功后,光标换行并持续闪烁,这叫“挂起”状态,表示Svn仓库服务已启动,不能关掉执行命令的窗口,想要别的操做新窗口操做。

SVN使用的协议是SVN协议,协议地址格式:svn://localhost 指向 仓库目录

2.3 设置仓库的匿名读写权限

SVN默认使用匿名用户,只有读(read)的权利,只能执行检出和更新操做。

须要手动设置匿名用户写入权限,才能执行提交操做。

配置文件是SVN仓库目录中conf目录下的svnserve.conf文件,在第19-20行有注释文件,能够取消注释,最好本身写一个,注意这里不能再语句后写注释:anon-access=write

第三章 SVN客户端经常使用操做

3.1 给仓库提交程序

个人开发环境是为Windows,相关操做以下:

1.在本身写代码的文件中建立一个工做副本(workspace),建立自定义文件名,进入目录,鼠标右键->svn checkout,打开checkout界面,填写SVN仓库地址和工做副本地址提交便可。

2.检出成果后,工做副本中就会出现.svn隐藏目录,这是SVN对当前目录下的文件进行版本控制的,至关于管理员,不能动里面的内容(禁止修改,删除)。

3.在工做副本中,开发相应的程序文件(test.html)选中文件,鼠标右键->TortoiseSVN ->Add 操做,表示将文件添加到svn版本控制范围,将文件标记为已添加状态,再次选中文件,右键-> SVN Commit 打开提交界面,填写版本说明(日志),选中要提交的文件,ok便可。

4.成功后版本号自动加1,第一次提交的就是第一个版本。

3.2 经常使用操做指令

1.Checkout检出指令:

从版本库检出仓库项目文件,通常只在第一次从版本库下载代码时执行,通常在一个空目录中执行。

2.Commit提交指令

将本地的更改提交到版本库。根据实际状况进行提交,通常在下班前至少提交一次。

3.Update更新指令:

从版本库更新最新的文件,通常在上班后先执行一次,或者每次开发一个新的功能前执行一次。

4.Add添加指令:

将一个新增的文件标记为已添加,会出如今提交列表并默认选中。

3.3 文件和目录的提交

能够对文件和目录单个进行添加和提交操做,也能够进行批量提交。

提交方式:在最顶层目录 空白处右键->SVN Commit 打开提交界面,手动选中要提交的文件,点击ok进行提交,提交成功版本号+1

注:提交列表中,只会出现新增的文件目录或者修改过的文件目录。

3.4 SVN图标集

SVN客户端文件图标及说明

常规图标:当本地文件与服务器端文件彻底同步时,系统显示常规图标

冲突图标:若是两个程序员同时修改同一个文件,系统在上传时就会显示冲突图标

已删除图标:服务器文件已删除,本地就会显示删除图标

增长图标:文件还未上传可是已经添加到上传的队列中

无版本控制图标:当前文件是新建的,还未上传

修改图标:若是本地文件有修改但未上传就显示修改图标

只读图标:服务器端文件若是设置为只读,客户端就显示只读图标

锁定图标:若是服务器端文件已锁定,本地就显示锁定图标

忽略图标:有的电脑图标可能不显示,若是某些文件与项目无关,能够添加到忽略列表

第四章 SVN使用注意事项

4.1 查看日志

查看日志(版本说明):空白处右键-> TortoiseSVN ->show log 查看日志

4.2 忽略文件

忽略文件:在开发过程当中,项目文件夹(工做副本)中,可能会出现一些和项目代码没有直接关系的文件,不必添加到svn版本库中去。能够对这些文件设置为忽略文件。

设置方式:选中要忽略的文件 -> 右键 -> TortoiseSVN -> add to ignore list 添加到忽略列表,其中四个选项:

文件名.后缀 忽略当前目录中的指定文件

*.后缀 忽略当前目录中的指定后缀的全部文件

文件名.后缀(recursively) 忽略当前目录以及子目录中的指定文件

*.后缀(recursively) 忽略当前目录以及子目录中的指定后缀的全部文件

对某个文件设置为忽略文件后,其不会出如今提交列表中。设置为忽略文件以后,通常能够经过反向操做,取消忽略的设置

选中要忽略的文件 -> 右键 -> TortoiseSVN -> remove from ignore list 从忽略列表移除

4.3 版本退回

回退版本:空白处右键 -> TortoiseSVN -> update to revision 更新至版本能够直接输入版本号,或者点击show log去选中一个指定版本。

关于版本退回特别说明:

注意:版本回退功能,只是将本地工做副本中的内容,更新到了一个指定版本,svn版本库中仍是有最新的代码,除非提交版本退回文件。

版本回退功能,只用于获取某一个历史版本的代码,而且备份用于其余用途。

不要在版本回退后的历史版本中直接进行开发。能够先经过svn update指令更新到最新的代码,再进行开发。

4.4 版本冲突

多我的同时对同一个文件作修改,而且修改在同一行。前后提交到版本库时,第一我的提交成功,版本号+1,其余人提交时,svn会提示必须先更新到最新版本再提交。若是其余人在本地工做副本进行更新,svn会提示发生了冲突。

冲突的模拟:在本地检出两个工做副本,模拟两我的同时开发。两个工做副本先都更新最新的版本,而后前后更改代码并提交。
两个表现:一是发生冲突的文件中,包含了多个版本的代码;二是目录中发生冲突的文件多出来几个不一样后缀版本的文件

发生了版本冲突后无法提交文件,必须先解决冲忽然后再提交到版本库。

处理版本冲突问题通常直接可以区分头儿和小弟的。由于难且重要。

解决版本冲突的方式:

1.继续提交本地的修改,使用svn resolve操做,修改发生冲突的文件中的代码,保留指定的代码(删除冲突标记行)。选中发生冲突的文件,右键-> TortoiseSVN -> resolve 解决,打开解决冲突界面,选中要解决冲突的文件,点击ok;将指定的文件设置为已解决状态,因冲突产生的多余的文件都被自动删除;继续执行svn commit提交操做便可。

2.放弃本地的修改,使用svn revert操做 将指定文件还原成最新版本,选中发生冲突的文件,右键->TortoiseSVN -> revert 还原 打开还原界面,选中要还原的文件,点击ok, 放弃本地的修改,并将指定文件变为最新版本,适合用于少许代码修改;

版本冲突只是发生在本地的工做副本的,版本库中并无版本冲突,由于有冲突文件没法提交。

4.5 配置多仓库

在开发过程当中,一般可能同时开发多个项目,都是用svn来进行管理。每一个项目对应着对应的版本库。

使用svn客户端进行检出操做时,须要使用到svn版本库的地址svn://ip/目录,这个地址在启动svn仓库服务后,指向了启动服务时指定的目录。一个地址只能指向一个目录。

配置方式:

在启动svn仓库服务时,仓库地址指向多个版本库的共同的上级目录(父级目录)。也就建立仓库时将svn://ip地址指向共同目录
#建立项目1仓库
svnadmin create "共同目录/项目1"
#启动SVNserve大目录
svnserve -d -r "共同目录"
#从新开一个新命令窗口,不须要启动SVNserve目录
svnadmin create "共同目录/项目2"

命令说明:

1.对于已经在使用的项目1仓库,须要将仓库地址从新定位到svn://ip/项目1定位方式 空白处右键->TortoiseSVN -> relocate 从新定位点击ok确认进行从新定位,以后能够正常使用。

2.对于准备使用的项目2仓库,检出时直接使用svn://ip/项目2地址。

注意:检出操做必须在一个空文件夹中进行。

4.6 权限控制

svn提供了一个可选的权限控制功能,能够限制用户的访问权限。权限控制分为两部分:认证(Authentication)和受权(Authorization)

认证文件:鉴别用户身份,能够设置用户名和密码(passwd)

受权文件:判断用户是否具有某种操做(读写)的权限(authz)

注意:版本库的配置文件,只对当前版本库生效,每一个版本库都有本身的配置文件。

权限控制设置步骤:去掉注释,顶格,等于开启相应权限,不能有任何无关字符
1.修改svnserve.conf,关闭匿名用户的访问权限:anon-access=none

2.修改svnserve.conf,开启认证文件,开启受权文件:password-db=passwd(开启认证),authz-db=authz(开启受权)。

3.修改passwd文件,设置用户名和密码

#格式:用户名=密码
ak=ak1234
aklman=aklman1234
ahmatbek=ahmatbek1234

4.修改authz文件,设置哪些用户具备哪些权限:

第一种方式:给指定用户直接受权;
#1.指定仓库名称,若是使用单仓库,仓库所在目录设置为[/];若是使用了多仓库,仓库所在目录设置为[项目1:/]
[项目1:/]
#2.格式:用户名=权限
ak=rw
aklman=r
ahmatbek=rw
第二种方式:对用户进行分组,对分组统一受权
#1.格式:分组名称=用户名1,用户名2
T5=aklman,ahmatbek
T4=ak,xiaoming
#2.指定仓库名称,若是使用单仓库,仓库所在目录设置为[项目/];若是使用了多仓库,仓库所在目录设置为[项目1:/]
[项目1:/]
#3.给分组受权
@T5=rw
@T4=r

5.完成以上设置以后,从新在工做副本中,进行svn的相关操做,会提示须要先认证:

填写正确的用户名和密码进行认证,能够选择记住认证信息,之后不须要进行重复认证,不然每一次都须要进行认证。

4.7 清除保存的认证信息

保存认证信息后,若是由于一些缘由好比修改了密码,须要从新进行认证,须要先清除保存的认证信息才能打开认证界面。

清楚方式:空白处右键 -> TortoiseSVN -> settings设置 打开设置界面,在左侧找到Saved Data点击,在右方找到Authentication data ,点击后面的清除按钮进行清除。

第五章 SVN自动服务器与批量处理执行

5.1 为何须要自动启动服务

使用svn仓库,须要先启动仓库服务,必须保持命令行窗口的挂起状态,若是关闭窗口,则仓库服务会中止。这种方式不太友好,更好的方式,将svn仓库服务设置为开机自启动的服务。

5.2 建立自动建立服务

建立自启动服务,经过如下命令实现:

#windows中,1.必须使用管理员身份打开命令行窗口;2.箭头位置必须放置一个空格,不然建立会失败
sc create svn binPath= "F:\Subversion\svnserve.exe -r F:\svncangku --service" start= auto
#Linux中,只启动一次永久有效,除非关掉
sudo svnserve -d -r /home/data/svn/
--service 表示其为服务项目,start= auto表示电脑开机就自动启动该服务

建立成功以后,下次重启电脑,svn仓库服务会自动启动(偶尔可能会自动启动失败,须要手动启动),能够在计算机的服务界面查看相关服务(右键计算机-> 管理->服务)。

5.3 批处理指令

1.net start svn 启动svn服务

2.net stop svn 中止svn服务

3.sc delete svn 删除svn服务(记住:svn若是须要删除必须先中止)

能够经过以上命令在cmd窗口中执行(这些命令也必须以管理员身份打开cmd窗口)

能够将在cmd命令行执行的命令,保存到一个.bat后缀的文件中,这就是批处理文件;须要执行对应命令时,直接运行对应的批处理文件。如:开启

net start svn
须要开启svn服务时,直接以管理员身份运行svnstart.bat便可。

第六章 钩子程序同步代码

6.1 钩子程序原理

当项目开发到必定阶段,部署到另一台服务器的apache下运行后。若是继续对项目进行开发,将新的代码提交到版本库,另外服务器的apache下的代码,须要执行svn更新操做,才能获得最新的代码。

为此Svn提供了一个钩子程序同步代码的功能,能够经过一些设置,每当svn版本库中有更新,则在指定服务器apache项目目录中自动执行svn update命令。

SVN之钩子程序原理

6.2 使用同步钩子(post-commit)程序

使用同步钩子的步骤:

1.在服务器端apache下建立一个文件夹用于接收同步数据

2.在本地和服务器端同时检出或者更新svn仓库最新数据

3.打开服务器的项目1仓库,找到hooks钩子目录,新建post-commit.bat批处理文件,而后输出以下代码

#SET SVN=”F:\Subversion\svn.exe”  设置svn指令目录
#SET DIR=”F:\workspace\online”  设置须要同步的目录
#SVN update %DIR% --username username --password password  使用update指令更新数据到同步目录

SET SVN="F:\Subversion\svn.exe"
SET DIR="F:\workspace\online"
SVN update %DIR% --username aklman --password aklman1234

参考资料

版本控制笔记

相关文章
相关标签/搜索