一、svn(后悔药)
1、介绍
SVN全名Subversion,即版本控制系统。它将数据放置在一个*仓库(repository)中。这个仓库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把数据恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。
svn=代码版本控制系统+备份服务器
类似软件:csv、vss、svn、git(github)
csv:最早期的版本控制系统,是svn的前身,现已被svn替代
vss:微软的产品,主要对.net代码进行版本控制
svn:现在企业使用最多的版本控制系统
git:开始主要是用于管理linux内核的,由李纳斯发明
外国的代码托管网站-github: https://github.com
中国代码托管网站-码云: https://git.oschina.net/
二、svn软件的安装
服务端下载地址: https://www.visualsvn.com/visualsvn/download/
客户端下载地址: https://tortoisesvn.net/downloads.html
1、安装服务端
测试有没有安装成功,直接win+R,输入svn即可,如果有以下提示说明安装成功:
解决办法:找到环境变量path选项,鼠标点进去移出来点击确定即可,不需要做任何的更改。在重新打开命令行进行输入svn进行测试
2、安装客户端
安装客户端的时候,注意自己电脑的系统位数是32还是64,安装客户端之后在安装系统对应位数的汉化包(可选)
检出有没有安装成功,鼠标右键多出以下两个选项即可:
有需要的同学可以安装对应位数的汉化包:
设置中文:
三.svn的使用
1、svn的三大指令
l checkout(检出) :用于与svn服务器建立连接,输入用户名和密码,获取代码到本地目录(第一次连接使用)
l commit:提交本地代码到svn服务器
l update:把svn服务器上面的代码更新下来
2、svn使用图解
提示:以后去公司很少部署svn服务端,我们只需要在自己的电脑中安装客户端即可,接着技术主管或者经理给我们分配一个账号和svn服务器的地址告诉我们,然后开始开发。
四、部署单仓库(技术总监)
注意:在我们的svn中项目不叫项目文件夹,我们把项目称之为”仓库”
1、部署单仓库的步骤
第一步:在任意的盘符位置,建立一个项目文件夹(D:/app/blog)
第二步:把上面的项目文件夹变为仓库
svnadmin create D:\app\blog
第三步:监管上面的仓库
svnserve -d -r D:\app\blog
-d :后台监管
-r:监管的目录(仓库的目录)
2、连接svn服务器
第一步:任意的建立一个检出目录,右键检出checkout或者版本库浏览器
区别:checkout 会把仓库中的所有代码都检出到指定的目录
版本库浏览器:可以浏览仓库中的所有的文件,有选择性检出指定的某个文件
输入svn服务器的地址:svn://127.0.0.1
第二步:检出代码
如果版本号为0,可以说明这是一个新仓库。检出之后会在当前的检出目录多一个隐藏文件夹.svn,就说明已经与svn服务器建立关联了。
3、上传代码到svn服务器
第一步:任意的在检出目录添加一些文件,进行鼠标右键提交
第二步:填写提交时的备注信息
提交后出现无权限:
注意:只要是新建立的仓库,第一次提交都是没有权限,我们可以写改这个仓库的配置文件进行权限控制。
4、单仓库的权限(用户名和密码)
细分两种:
1、匿名用户提交(不需要用户名和密码也可以提交,但是不安全,一般个人使用)
2、允许授权用户提交(需要用户名和密码,安全一点)
4-1、匿名用户提交
第一步:打开仓库的conf目录,如下:
匿名用户只需要修改svnserve配置文件即可:
不需要重新监管,保存会立刻生效。
再次进行提交成功:
每次成功提交都会产生一个新的版本号。
4-2、授权用户的权限配置
第一步:修改仓库cong目录下面的svnserve文件:
第二步:修改passwd文件,给当前仓库添加一些用户和用户对应的密码
格式:用户名 = 密码
注意: 用户名 = 密码;
提示:在linux中如果有类似此文件,需要给其设置严格的读取权限。
第三步:修改authz文件,配置用户的权限
因为cainiao用户对core目录只有r权限,没有w权限,也就是说只能更新,但是不能提交,会把以下的错误:
5、svn常见图标
(1)图标异常(没有出现)的解决办法:
win7解决办法:
底部启动任务管理器,找到进程选项,找到进程名explorer.exe结束掉,然后再找到文件选项新建刚才结束的进程explorer.exe,如下图所示:
win8,win10解决办法:
需要修改注册表中的某些选项,参考下面的图片:
(2)常见图标说明:
常规图标:
出现此图标,说明此文件中的内容与svn服务器文件中的内容一样。
修改图标:
当我们对本地的某个文件进行修改,导致与svn服务器上面的对应的文件的内容不一致就会出现此图标。
无版本控制图标
说明此文件没有与svn服务器建立关联
忽略图标
当我们有些文件不想提交到svn服务器或者没有必要提交,我们可以把这些文件设置为忽略即可,那么提交的时候这些文件就不会出现在提交的文件变更列表中。
忽略一般有两种:
忽略一个具体的文件:1.jpg
忽略某一类的文件:*.jpg
冲突的图标
尤其是团队开发的时候,多个开发人员对同一个文件的相同行代码都进行了修改,那么后者提交的会覆盖前者提交的,但是svn不会覆盖,会提示我们解决冲突。
五、【重点】svn代码冲突的解决
说明:
尤其是团队开发的时候,多个开发人员对同一个文件的相同行代码都进行了修改,那么后者提交的会覆盖前者提交的,但是svn不会覆盖,会提示此文件冲突,需要我们手动去解决冲突。
这里以两个用户分别是dashen和cainiao用户为例.
dashen用户先对1.php文件进行修改然后提交:
dashen用户修改第5行和第6代码之后,进行提交,也就是现在svn服务器中的1.php的文件内容应该dashen提交的。
cainiao用户提交之前,对1.php文件的第5和第6行代码也进行了修改,修改如下:
提交会发现有冲突:
解决办法:点击上面的升级。或者是更新都可以,出现如下文件:
文件说明:
文件名.mine :当前用户准备要提交的文件
文件名.r8(8代表版本号):两者未提交之前,服务器上面最新的文件
文件名.r9(9代表版本号):代表前一个用户提交的服务器上面最新的文件
黄色感叹号的文件:把两者有冲突的代码部分整合在一起。
解决办法:把除开黄色感叹号的以外的三个文件给删除掉,在整合黄色的文件,再次进行提交即可。
整合冲突代码的时候,程序员(工程师)之前应该彼此商量一下,使用谁的代码。不要轻易覆盖人家的代码。
六、svn中的版本回退(后悔药)[重点]
使用到版本回退的场景:
①不小心删除了一个文件,并且提交了,这时候可以通过提交的日志来找回。
②找回之前所写过代码,这时候也可以通过提交的日志来找回。
具体步骤:
右键更新至版本:
点击日志来找回:
第二步:找到之前提交代码的日志信息,进行找回
七、update更新注意要点
l 当本地文件没有变动,服务器文件改动的时候,更新会从服务器取文件覆盖当前文件。
l 当本地文件有改动,服务器文件没有改动的话,svn端的不会覆盖本地的。
l 当本地文件有改动,服务器文件有改动的话,如果改动的部分不冲突,就会合并文件到本地,如果有冲突的话,需要自己手动解决冲突,然后再提交。
八、svn的存储机制(了解即可)
svn存储机制是采用差异存储法
svn每次提交的时候,都会和之前的版本做个对比,把不同的地方,单独使用一个小区块来存储,节省磁盘空间。
九、svn中部署多仓库
第一步:任意的目录(D:/app)建立多个项目文件夹
第二步:把上面三个项目文件夹变为仓库
因为上面的blog已经是仓库了,只需要把ios和android项目文件夹变为仓库即可:
第三步:监管三个仓库的父目录(D:/app)
获取多仓库中各个仓库中的项目代码:
svn://ip/仓库名
如获取blog项目代码: svn://127.0.0.1/blog
如获取android项目代码: svn://127.0.0.1/android
如获取ios项目代码: svn://127.0.0.1/ios
特别注意:svn://127.0.0.1 这种地址形式是针对于单仓库
十、多仓库的权限设置
这里有三个仓库,以其中一个blog仓库为例,做权限控制:
第一步:打开blog仓库的conf目录,修改svnserve文件:
第二步:加用户名和密码,修改passwd文件
第三步:修改authz文件,配置权限
十一、SVN其他功能
1、清除用户用户名和密码
2、export指令(相当于拷贝项目,没有隐藏文件.svn,不受版本控制)
导出后如下所示:不再有.svn的隐藏文件夹,说明没有与svn服务器建立关联。
3、更改svn服务器地址
十二、svn注册成window系统服务
1、创建服务指令如下:
快捷键win+r:以管理员的方式执行以下命令:
sc create SVNService binpath= "D:\svn\server\bin\svnserve.exe --service -r D:\app" start= auto
特别注意:
binpath=后面有个空格 start=后面有个空格(只能有一个空格)
其中SVNService 是服务的名称,此服务名可以自己自定义
特别注意:如果以系统服务服务的方式去监管仓库,就不可以使用之前黑窗口的方式去监管。(一山不容二虎)
2、服务的控制指令
关闭、开启、重启服务:
net stop|start|restart 服务名 (如开启svn服务:net start SVNService)
删除服务:
sc delete 服务名 (如删除svn服务:sc delete SVNService)
3、cmd命令的批处理
把一些原本在黑窗口执行的命令,我们可以把这些命令写在文件名后缀bat的文件中。
注意:以上bat文件需要以管理员的方式去执行。
十三、svn中的钩子
1、介绍
所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改。每个钩子都会被告知足够多的信息,包括那是什么事件,所操作的对象,和触发事件的用户名。通过钩子的输出或返回状态,钩子程序能让工作继续、停止或是以某种方式挂起。
说的简单点,我们可以利用钩子在提交前或者是提交后做一些操作。如:
l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。
l 利用提交后的钩子把svn仓库代码实时同步到网站web目录(重点掌握)
2、钩子的种类
l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。
l 利用提交后的钩子把svn仓库代码实时同步到网站web目录(重点掌握)
3、钩子实战[重点]
l 利用提交后的钩子把svn仓库代码实时同步到网站web目录
明确几点:
web站点:D:\server\apache\htdocs\blog
检出目录:C:\Users\oj\Desktop\blog
第一步:想让代码实时同步到web站点,必须让web站点与svn服务器的对应的仓库建立关联,只需要有一个.svn隐藏文件夹即可。
第二步:去仓库的hook钩子目录,把post-commit.tmpl复制一份到当前目录并改名为post-commit.bat。之前的内容全部去掉
在post-commit.bat的文件内容如下:
@echo off
SET REPOS=%1
SET REV=%2
SET DIR=%REPOS%/hooks
SET PATH=%PATH%
SET WEB_DIR=D:\server\apache\htdocs\blog
svn update %WEB_DIR% --username dashen --password dashen111
l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。
第二步:去仓库的hook钩子目录,把pre-commit.tmpl复制一份到当前目录并改名为pre-commit.bat。
pre-commit.bat的文件内容如下:
十四、局域网访问别人电脑
前提:对方的电脑安装了svn服务器,并且创建了仓库;对方电脑关闭了防火墙;知道对方仓库的账号与密码
1.电脑任意位置创建一个文件夹
2.鼠标右击--->版本库浏览器
3.输入url
4.弹出输入密码框
5.输入成功更新数据到shop文件夹
十五、Svn复习重点
代码冲突+版本回退+仓库代码同步web(钩子)