版本控制系统SVN使用介绍
SVN是一个开放源代码的版本控制系统。
SVN可解决以下3个问题: 协作开发:多人开发一个项目; 远程开发:开发人员分布在全国各地; 版本回退:当开发的新版本不满足需求时,可回退到上一个版本。 软件配置管理SCM:对软件源代码进行控制和管理; SCM软件有: CVS:元老级产品; VSS:入门级产品; ClearCase:IBM提供技术支持; SVN:主流产品; SVN(SubVersion)特点: 使用简单、入门容易、支持跨平台;
SVN是C/S架构,SVN(服务端|客户端)官方下载地址:https://www.visualsvn.com/;SVN客户端下载地址: 软件项目的SVN使用流程: 项目经理|开发人员:从SVN服务器check out(检出)软件项目到本地PC-->本地PC上创建项目文件-->从本地PC向SVN服务器commit(提交)项目文件-->从SVN服务器update(更新)软件项目到本地PC,以此循环完成软件项目。
SVN服务端安装注意事项: 1、安装组件尽量将可视化界面组件(visualSVN server)和dos管理界面组件(management console)都装上,必须将svn命令行加入到环境变量; 2、安装版本分为标准版(免费)和企业版(收费),安装目录不得有汉字、空格、特殊字符,否则在dos窗口使用命令时会失败; 3、修改端口,避免与其他服务冲突;必须开启https; 4、认证方式尽量选SVN认证;
SVN服务端配置: 1、版本仓库创建 在SVN服务端安装目录下(C:\SVNServer\)创建公共访问目录WebAPP;在WebAPP下创建软件项目目录(一般被称为版本仓库),不同项目可用不同目录区分,如:创建shop、Ucenter;创建方法为:windows可视化创建、dos命令行创建:svnadmin create C:\SVNServer\WebAPP\shop;建议在dos窗口创建版本仓库; 版本仓库下初始文件: conf:整个项目配置文件的目录;该目录下,authz是授权文件;hooks-env.tmpl是钩子的模板文件;passwd是保存账户名及密码的文件;svnserve.conf是核心配置文件; db:存储整个项目数据的目录; hooks:钩子程序的目录,在同步复制,同步更新时会使用钩子指令; locks:主要用来追踪用户; format:代表版本仓库的层次结构; README.txt:项目介绍文件; 2、服务器端监控 命令:svnserve -d -r C:\SVNServer\WebAPP\shop ::-d表示后台运行,-r表示监听版本仓库;该窗口关闭则会终止监管; 服务端监管后,可通过svn://127.0.0.1/来访问被监管的版本仓库; 3、权限控制 默认情况下,SVN禁止匿名访问;通过修改C:\SVNServer\WebAPP\shop\conf\svnserve文件,可设置权限;如:开通匿名用户的读写权限;
SVN客户端安装注意事项: 1、安装完成后,必须重启PC,才能在桌面看到tortoiseSVN的图标; SVN客户端配置: 1、汉化(略); 2、使用客户端软件连接SVN服务器:在apache服务器的htdocs目录下创建项目shop-->进入项目目录shop,右键点击tortoiseSVN-->repo-browser-->输入监管的svn服务器端(svn://127.0.0.1/)-->设置checkout规则-->确定checkout;
.svn隐藏目录出现则表示,svn服务端与svn客户端建立连接;
SVN三大指令使用: 1、客户端检出项目文件;仅在第一次时链接服务端时使用,此后使用更新指令; 2、客户端修改文件后,提交文件至服务端; 3、其他客户端更新文件至本地,再次修改文件后提交,以此循环完成项目; SVN在生产环境中单项目的使用: 1、项目经理在公共目录WebAPP下创建版本仓库shop;dos窗口执行命令:svnadmin create C:\SVNServer\WebAPP\shop; 2、服务端监管版本仓库shop; 3、项目经理在创建本地目录manager_shop并设置客户端版本浏览器后,检出服务端shop文件至本地; 4、项目经理创建shop项目文件后并提交至服务端,必须填写备注信息,此时版本为1; 5、程序员李四在本地创建lisi_shop目录后设置repo-browser,检出服务端shop文件至本地; 6、程序员李四创建shop项目文件后并提交至服务端,必须填写备注信息,此时版本为2; 7、程序员张三类似流程创建文件shop.php后提交,此时版本为3; 8、版本回退:当版本不满足需求后可退到指定版本,然后以此版本进行项目修正;项目经理update所有文件至本地后,发现项目需要会退到2版本,要求lisi直接在客户端进行版本回退到2;然后修改文件后提交,此时版本为4;此后所有用户更新的版本为4,每个用户应更新版本4并重新修改后行提交新版本; 9、版本冲突:当多人同时修改一个文件就会产生版本冲突;发生冲突后,选择update将项目文件更新到本地,冲突文件会出现4个;filename.php是整合后的文件,filename.php.mine是客户端修改后的文件,filename.php.rn是更新至本地的起始状态文件,filename.php.rn+1是更新至其他客户端本地的起始状态文件并在修改后提交的新版本文件;删除filename.php.rn、filename.php.rn+1、filename.php.mine,修改冲突文件filename.php后上传服务端;
此时,项目的版本1创建成功;
版本回退
版本冲突
SVN钩子:指SVN服务器中,一些与版本库事件发生后会执行某些任务的程序;默认情况下,钩子的子目录(*/版本仓库/hooks)中包含各种版本库的钩子模板;可使用bat或shell指令来编写钩子程序; 钩子示例: 1、*/版本仓库/hooks下创建post-commit.bat文件,内容如下: SET SVN="C:\SVNServer\bin\svn.exe" ::设置SVN服务器端SVN路径; SET DIR="C:\Apache2.2\htdocs\shop" ::设置web服务器项目运行目录; SVN update %DIR% ::更新SVN服务器端项目文件至web服务器工作目录; 2、在apache服务器的网站根目录下创建shop目录,检出项目文件; 3、程序员修改项目文件并提交SVN服务端,web服务器工作目录会自动更新项目文件;
SVN在生产环境中多项目的使用: 1、项目经理手动新建版本仓库目录WebAPP;dos窗口执行命令创建版本仓库shop、Ucenter: svnadmin create C:\SVNServer\WebAPP\shop\ svnadmin create C:\SVNServer\WebAPP\ucenter\ 2、windows服务器创建自启动服务SVNService,用于服务端监管总目录WebAPP;svnserve只能监管一个目录,因此可通过监管总目录来监管多个项目; sc create SVNService binpath= "C:\SVNServer\bin\svnserve.exe --service -r C:\SVNServer\WebAPP" start= auto ::创建自启动服务,监管多个项目的总目录WebAPP; sc delete SVNService ::删除自启动服务; net start SVNService ::手动启动服务; net stop SVNService ::手动启动服务; net delete SVNService ::手动删除服务; 3、分别在shop、ucenter版本仓库的配置文件设置权限控制: 1)在svnserve.conf中启用authz、passwd文件,并禁用默认用户读写; 2)在passwd中创建账户和密码; 3)在authz中对用户名设置组,并对组设置版本仓库的访问权限; 4、项目经理在本地PC上创建manager_shop目录,设置客户端版本浏览器后(svn://127.0.0.1/shop),链接服务器; 5、项目经理检出服务端shop文件至本地,创建文件并提交至服务端; 6、程序员按以上方法检出、修改、提交、更新文件至项目完成; 7、设置钩子程序,自动同步项目文件至web服务器工作目录。
shop项目授权访问
问题1:创建版本仓库失败,提示:too many arguments?
原因分析:svn服务端安装目录有空格;
解决方法:重新安装svn服务端,安装目录不得有空格;
问题2:手动创建版本仓库,没有项目相关文件,如conf等?
原因分析:手动创建版本仓库,但未初始化;
解决方法: svnadmin create C:\SVNServer\WebAPP\shop
问题3:手动创建版本仓库失败?
原因分析:该目录下非空;
解决方法:删除该目录下所有文件,然后执行命令即可。
问题4、多项目时,检出文件失败?
原因分析:未发现shop版本仓库。
解决方法:创建shop版本仓库即可。
问题5:启动自启动服务SNSService失败?
原因分析:自启动服务不能使用-d选项。
解决方法: 修改自启动服务的命令即可。
问题6:钩子程序执行失败?
原因分析:repo-browser路径错误或bat文件存在问题。
解决方法:重建工作目录,设置正确的repo-browser路径,并删除bat文件的中文注释即可。
问题7:钩子程序执行故障,web服务器目录被锁?
原因分析:相同的文件更新,但未清理;
解决方法:清理同名文件即可*。