版本控制工具就是记录项目代码文件夹和文件的每个改动,并为每次改动编上序号(也叫版本号),用于存储,跟踪文件夹和文件的修改历史的工具。经过版本控制,能够恢复文件的旧版本并查看历史-谁在什么时间如何进行的修改。html
目前主流的版本控制工具:Git和VSN。本学习笔记是SVN学习笔记,由于我在的公司就用这个。linux
SVN是Subversion的简称,是一个开放源代码的版本控制系统,是用于多我的共同开发同一个项目,共用资源的目的。程序员
版本库:Subversion使用集中的数据库,它包含了全部的版本控制文件及其完整历史。这个数据库就是版本库。版本库一般位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端提供须要的数据。sql
工做副本:这是实际工做的地方。每个开发者在本身的电脑上都有属于本身的工做副本。能够经过Subversion客户端将最新的版本从版本库上取下来,在本地的副本上工做而不影响其余人,若是对更改满意就能够将其提交到版本库中。数据库
1.搭建svn服务器:安装服务器端软件、建立项目仓库、启动仓库服务apache
2.在我的开发电脑,安装svn客户端软件windows
3.建立项目目录,经过checkout检出操做,与svn版本库创建链接,下载全部的代码服务器
4.平常开发,经过commit提交操做,将本地的修改,提交到svn版本库svn
5.其余人提交过代码,能够经过update更新操做,将版本库中最新的代码(被修改部分)更新到本地。工具
注意:svn服务器的地址 svn://IP , 由服务器搭建服务器的ip地址和相关目录组成,由搭建者管理
1.多人协做开发(解决代码合并覆盖问题)
2.版本退回(将一个或多个文件恢复到旧版本)
3.查看修改历史(日志),方便把控开发进度
建立svn版本库命令:svnadmin create "仓库地址"
在Windows中打开cmd输入命令执行便可。
执行命令成功后,仓库地址中建立好相应的仓库文件夹。
Linux服务器上经过命令行就能建立,而Windows中有时候执行命令会出现错误。解决方式有:
1.将svn服务器端安装目录设置到环境变量中2.将svnadmin.exe拖到命令行窗口或者书写完整路径,加上 create “仓库地址” 执行
使用SVN版本库前要启动SVN仓库服务,命令是:svnserve -d -r "仓库地址"
执行成功后,光标换行并持续闪烁,这叫“挂起”状态,表示Svn仓库服务已启动,不能关掉执行命令的窗口,想要别的操做新窗口操做。
SVN使用的协议是SVN协议,协议地址格式:svn://localhost 指向 仓库目录
SVN默认使用匿名用户,只有读(read)的权利,只能执行检出和更新操做。
须要手动设置匿名用户写入权限,才能执行提交操做。
配置文件是SVN仓库目录中conf目录下的svnserve.conf文件,在第19-20行有注释文件,能够取消注释,最好本身写一个,注意这里不能再语句后写注释:anon-access=write
个人开发环境是为Windows,相关操做以下:1.在本身写代码的文件中建立一个工做副本(workspace),建立自定义文件名,进入目录,鼠标右键->svn checkout,打开checkout界面,填写SVN仓库地址和工做副本地址提交便可。
2.检出成果后,工做副本中就会出现.svn隐藏目录,这是SVN对当前目录下的文件进行版本控制的,至关于管理员,不能动里面的内容(禁止修改,删除)。
3.在工做副本中,开发相应的程序文件(test.html)选中文件,鼠标右键->TortoiseSVN ->Add 操做,表示将文件添加到svn版本控制范围,将文件标记为已添加状态,再次选中文件,右键-> SVN Commit 打开提交界面,填写版本说明(日志),选中要提交的文件,ok便可。
4.成功后版本号自动加1,第一次提交的就是第一个版本。
1.Checkout检出指令:
从版本库检出仓库项目文件,通常只在第一次从版本库下载代码时执行,通常在一个空目录中执行。
2.Commit提交指令
将本地的更改提交到版本库。根据实际状况进行提交,通常在下班前至少提交一次。
3.Update更新指令:
从版本库更新最新的文件,通常在上班后先执行一次,或者每次开发一个新的功能前执行一次。
4.Add添加指令:
将一个新增的文件标记为已添加,会出如今提交列表并默认选中。
能够对文件和目录单个进行添加和提交操做,也能够进行批量提交。
提交方式:在最顶层目录 空白处右键->SVN Commit 打开提交界面,手动选中要提交的文件,点击ok进行提交,提交成功版本号+1注:提交列表中,只会出现新增的文件目录或者修改过的文件目录。
常规图标:当本地文件与服务器端文件彻底同步时,系统显示常规图标冲突图标:若是两个程序员同时修改同一个文件,系统在上传时就会显示冲突图标
已删除图标:服务器文件已删除,本地就会显示删除图标
增长图标:文件还未上传可是已经添加到上传的队列中
无版本控制图标:当前文件是新建的,还未上传
修改图标:若是本地文件有修改但未上传就显示修改图标
只读图标:服务器端文件若是设置为只读,客户端就显示只读图标
锁定图标:若是服务器端文件已锁定,本地就显示锁定图标
忽略图标:有的电脑图标可能不显示,若是某些文件与项目无关,能够添加到忽略列表
查看日志(版本说明):空白处右键-> TortoiseSVN ->show log 查看日志
忽略文件:在开发过程当中,项目文件夹(工做副本)中,可能会出现一些和项目代码没有直接关系的文件,不必添加到svn版本库中去。能够对这些文件设置为忽略文件。
设置方式:选中要忽略的文件 -> 右键 -> TortoiseSVN -> add to ignore list 添加到忽略列表,其中四个选项:文件名.后缀 忽略当前目录中的指定文件
*.后缀 忽略当前目录中的指定后缀的全部文件
文件名.后缀(recursively) 忽略当前目录以及子目录中的指定文件
*.后缀(recursively) 忽略当前目录以及子目录中的指定后缀的全部文件
对某个文件设置为忽略文件后,其不会出如今提交列表中。设置为忽略文件以后,通常能够经过反向操做,取消忽略的设置
选中要忽略的文件 -> 右键 -> TortoiseSVN -> remove from ignore list 从忽略列表移除
回退版本:空白处右键 -> TortoiseSVN -> update to revision 更新至版本能够直接输入版本号,或者点击show log去选中一个指定版本。
关于版本退回特别说明:
注意:版本回退功能,只是将本地工做副本中的内容,更新到了一个指定版本,svn版本库中仍是有最新的代码,除非提交版本退回文件。版本回退功能,只用于获取某一个历史版本的代码,而且备份用于其余用途。
不要在版本回退后的历史版本中直接进行开发。能够先经过svn update指令更新到最新的代码,再进行开发。
多我的同时对同一个文件作修改,而且修改在同一行。前后提交到版本库时,第一我的提交成功,版本号+1,其余人提交时,svn会提示必须先更新到最新版本再提交。若是其余人在本地工做副本进行更新,svn会提示发生了冲突。
冲突的模拟:在本地检出两个工做副本,模拟两我的同时开发。两个工做副本先都更新最新的版本,而后前后更改代码并提交。
两个表现:一是发生冲突的文件中,包含了多个版本的代码;二是目录中发生冲突的文件多出来几个不一样后缀版本的文件
发生了版本冲突后无法提交文件,必须先解决冲忽然后再提交到版本库。
处理版本冲突问题通常直接可以区分头儿和小弟的。由于难且重要。
解决版本冲突的方式:
1.继续提交本地的修改,使用svn resolve操做,修改发生冲突的文件中的代码,保留指定的代码(删除冲突标记行)。选中发生冲突的文件,右键-> TortoiseSVN -> resolve 解决,打开解决冲突界面,选中要解决冲突的文件,点击ok;将指定的文件设置为已解决状态,因冲突产生的多余的文件都被自动删除;继续执行svn commit提交操做便可。2.放弃本地的修改,使用svn revert操做 将指定文件还原成最新版本,选中发生冲突的文件,右键->TortoiseSVN -> revert 还原 打开还原界面,选中要还原的文件,点击ok, 放弃本地的修改,并将指定文件变为最新版本,适合用于少许代码修改;
版本冲突只是发生在本地的工做副本的,版本库中并无版本冲突,由于有冲突文件没法提交。
在开发过程当中,一般可能同时开发多个项目,都是用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地址。
注意:检出操做必须在一个空文件夹中进行。
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的相关操做,会提示须要先认证:
填写正确的用户名和密码进行认证,能够选择记住认证信息,之后不须要进行重复认证,不然每一次都须要进行认证。
保存认证信息后,若是由于一些缘由好比修改了密码,须要从新进行认证,须要先清除保存的认证信息才能打开认证界面。
清楚方式:空白处右键 -> TortoiseSVN -> settings设置 打开设置界面,在左侧找到Saved Data点击,在右方找到Authentication data ,点击后面的清除按钮进行清除。
使用svn仓库,须要先启动仓库服务,必须保持命令行窗口的挂起状态,若是关闭窗口,则仓库服务会中止。这种方式不太友好,更好的方式,将svn仓库服务设置为开机自启动的服务。
建立自启动服务,经过如下命令实现:
#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仓库服务会自动启动(偶尔可能会自动启动失败,须要手动启动),能够在计算机的服务界面查看相关服务(右键计算机-> 管理->服务)。
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便可。
当项目开发到必定阶段,部署到另一台服务器的apache下运行后。若是继续对项目进行开发,将新的代码提交到版本库,另外服务器的apache下的代码,须要执行svn更新操做,才能获得最新的代码。为此Svn提供了一个钩子程序同步代码的功能,能够经过一些设置,每当svn版本库中有更新,则在指定服务器apache项目目录中自动执行svn update命令。
使用同步钩子的步骤:
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