SVN版本控制的环境搭建
2013-11-03 17:01
387 查看
1、前言
2、版本控制概念
2.1、什么是版本控制简单点来说,版本控制就是数据仓库,它可以记录你对文件的每次更改。这样,就算你在昏天黑地的改了几个月后老板说不要了,还是按照过去那样,你也不会抓狂,简单的恢复版本操作就搞定一切。
2.2、什么是 Subversion
Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。
Subversion可以通过网络访问它的版本库,从而使用户可以在不同的电脑上使用。一定程度上可以说,允许用户在各自的地方修改同一份数据是促进协作。进展可能非常的迅速,并没有一个所有的改变都会取得效果的通道,由于所有的工作都有历史版本,你不必担心由于失去某个通道而影响质量,如果存在不正确的改变,只要取消改变。
一些版本控制系统也是软件配置管理(SCM)系统,这种系统经过特定的精巧设计来管理源代码,有许多关于软件开发的特性—本身理解编程语言、或者提供构建程序的工具。然而,Subversion不是这样一个系统,它是一个通用系统,可以管理任何类型的文件集,对你这可能是源代码,对别人,可能是一个货物报价单或者是书稿等。
2.3、版本库(repository)
Subversion 的核心就是 repository ,中文翻译成“版本库”。就是位于服务器端,统一管理和储存数据的地方。
3、搭建SVN平台
1、软件1)服务端:Subversion
subversion.apache.org - Getting Subversion - Binary Packages - Windows - Win32Svn - Files - 1.6.16 - svn-win32-1.6.16.zip
http://subversion.apache.org/
http://subversion.apache.org/download/#recommended-release
安装包版下载:http://sourceforge.net/projects/win32svn/files/?source=navbar
解压svn-win32-1.6.16.zip到C:\My Program Files
2)客户端:TortoiseSVN
tortoisesvn.tigris.org - tortoisesvn.net/downloads - TortoiseSVN 32-bit - downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.6.15.21042-win32-svn-1.6.16.msi
http://tortoisesvn.net/downloads.html
http://sourceforge.net/projects/tortoisesvn/files/?source=navbar
直接安装
3)配置服务端
1.安装版本控制库
路径自己定,我的做法是在D盘上新建一个svn文件夹,双击打开它,然后在里面点击右键,[TotoiseSVN]->[Create Repository here]进行创建,版本库模式指定为默认的即可。Repository创建完毕后会在目录下生成若干个文件和文件夹,conf目录是用来设置管理的目录;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录, 用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
(本步骤也可以用命令行来完成:svnadmin create D:/svn/repository)
2.设置版本控制库权限,打开/conf/目录,打开svnserve.conf找到一下两句:
# [general]
# password-db = passwd
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件
同样打开passwd文件,将
# [users]
# harry = harryssecret
# sally = sallyssecret
将# [users]开头#字符去掉,这是设置用户,一行一个,存储格式为“用户名 = 密码”,如可插入一行:wang=123,即为系统添加一个用户名为wang,密码为123的用户
3.启动服务器端并将svn设为系统服务,由于win7的安全权限问题,安装系统服务时会出现“[sc] openSCManager 失败 5 拒绝 ”错误。
解决方案:
打开cmd 输入
sc create svnser binPath= "D:/Program Files/Subversion/bin/svnserve.exe --service --root D:/svn"//服务指定版本库
回车;(注:“=”前不得有空格,后必须有空格。 svnser为自定义的服务名称)
不提示错误即为成功。
4、启动后在计算机->管理->服务和应用程序->服务->找到svnser,右键属性找到启动类型改为自动,这样每次开机它都会自动运行了)
5.访问svn,在桌面上点右键[TotoiseSVN]->[Repo-browser]在地址栏里输入svn://localhost/,这样就可以访问svn了,到这里也就完成了本地svn服务器端和客户端的安装。
4)TortoiserSVN客户端操作
1、浏览SVN服务器上的数据
URL of repository输入“svn://localhost/” 里面有子文件夹
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是
“svn://133.96.121.22/”。
2、客户端操作 CheckOut update import add
两种方法可以将新文件引入Subversion版本库:svn import和svn add
通过TortoisSVN import 其实也是add可以添加所有的,CheckOut可以指定N多目录(在Checkout目录下 TortoiserSVN的工能项增多。
4、SVN注意点
SVN和CVS一样会产生在工作目录下的.svn文件,该文件影响到文件夹或盘符的图标。
删掉后图标恢复正常
5、备份还原
方式一: 版本库文件的整个备份方式二: 使用svn命令
除去最常用的update,checkout, commit等操作, 最常见的就是对svn版本库的备份和还原。
备份策略
svn备份一般采用三种方式:
在命令行中使用命令
1)svnadmin dump
2)svnadmin hotcopy
3)svnsync.
注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。
笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。
优缺点分析:
==============
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。
第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。
备份的命令 写道
全备份:使用svnadmin dump或svnadmin hotcopy或svnsync来做,
hotcopy:
svnadmin hotcopy path/to/repository path/to/backup –clean-logs
svnadmin hotcopy d:\svnroot\project1 d:\svnrootbak\project1
dump:
svnadmin dump 版本库路径及名称 –revision 导出的版本号> 导出的命名
增量备份:使用svnadmin dump的–incremental选项来实现
svnadmin dump 版本库路径及名称 –revision 上次导出的版本号:到本次要导出到的版本号 –incremental > 导出的命名
一个技巧:如果你有一个较大的Subsersion版本库而你又想用最少的空间来将它备份下来,用这个命令(请将/repo替换成你的版本库路径)吧:
svnadmin dump –deltas /repo |bzip2 |tee dump.bz2 | md5sum >dump.md5
分步解释:最重要的一步是 -deltas,将消耗更多的CPU资源,但拥有更有效的差异存储办法。
bzip2压缩方案比gzip慢,但换来的更好的压缩率。
更有趣的是,tee方法将压缩的数据流转向到文件dump.bz2,同时将其输出到标准输出,后者有转向给了MD5摘要计算工具。
还原命令 写道
还原版本:svnadmin load 要恢复的版本库路径及名称 < 导出的命名
svnadmin hotcopy path/to/repository path/to/backup –clean-logs
我的svn是搭建在windows上的,用visual svn挺方便, 参考网上的bat备份svn的命令,我写了一个备份和还原全部版本库的bat脚本,
备份,需要把脚本放在版本库根目录下运行,例如dumpall.bat, 不指定参数则备份到当前目录下,否则备份到指定目录:
@ECHO OFF SET DUMPTO_DIR="." if not "%1" == "" ( echo Back up all to %1 SET DUMPTO_DIR=%1 ) SET VAR_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% dir /B /AD > DIRS IF EXIST DUMP_FILES ( DEL /Q DUMP_FILES ) FOR /F %%i IN (DIRS) DO ( SET REPOS_NAME=%%i CALL :DUMP_REPOS ) SET REPOS_NAME= ECHO. IF EXIST %DUMPTO_DIR%\Repos_%VAR_DATE%.zip ( echo Delete existing compressed dump file del %DUMPTO_DIR%\Repos_%VAR_DATE%.zip ) ECHO Compressing dump files... zip -j %DUMPTO_DIR%\Repos_%VAR_DATE%.zip %DUMPTO_DIR%\*.bin ECHO Delete dump files... FOR /F %%i IN (DUMP_FILES) DO ( DEL /Q %DUMPTO_DIR%\%%i ) DEL /Q DIRS DEL /Q DUMP_FILES SET DUMPTO_DIR= ECHO Successed. GOTO :EOF ::==== Functions ==== :DUMP_REPOS SET DUMP_FILE=%REPOS_NAME%.bin ECHO Dumping repository ^"%REPOS_NAME%^" ... svnadmin dump ^"%REPOS_NAME%^" -q > %DUMPTO_DIR%/%DUMP_FILE% IF %errorlevel%==0 ( ECHO %DUMP_FILE% >> DUMP_FILES ) ELSE ( DEL /Q %DUMP_FILE% ECHO Dump ^"%REPOS_NAME%^" failed. ) SET DUMP_FILE= ECHO.
@ECHO OFF SET DUMPTO_DIR="." if not "%1" == "" ( echo Back up all to %1 SET DUMPTO_DIR=%1 ) SET VAR_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% dir /B /AD > DIRS IF EXIST DUMP_FILES ( DEL /Q DUMP_FILES ) FOR /F %%i IN (DIRS) DO ( SET REPOS_NAME=%%i CALL :DUMP_REPOS ) SET REPOS_NAME= ECHO. IF EXIST %DUMPTO_DIR%\Repos_%VAR_DATE%.zip ( echo Delete existing compressed dump file del %DUMPTO_DIR%\Repos_%VAR_DATE%.zip ) ECHO Compressing dump files... zip -j %DUMPTO_DIR%\Repos_%VAR_DATE%.zip %DUMPTO_DIR%\*.bin ECHO Delete dump files... FOR /F %%i IN (DUMP_FILES) DO ( DEL /Q %DUMPTO_DIR%\%%i ) DEL /Q DIRS DEL /Q DUMP_FILES SET DUMPTO_DIR= ECHO Successed. GOTO :EOF ::==== Functions ==== :DUMP_REPOS SET DUMP_FILE=%REPOS_NAME%.bin ECHO Dumping repository ^"%REPOS_NAME%^" ... svnadmin dump ^"%REPOS_NAME%^" -q > %DUMPTO_DIR%/%DUMP_FILE% IF %errorlevel%==0 ( ECHO %DUMP_FILE% >> DUMP_FILES ) ELSE ( DEL /Q %DUMP_FILE% ECHO Dump ^"%REPOS_NAME%^" failed. ) SET DUMP_FILE= ECHO.
还原:cd到备份目录,再运行,例如loadall.bat, 如果不指定参数,则认为当前目录就是备份的目录,否则从指定目录进行还原。另外, 如果是备份到了压缩包,需要先解压。
SET VAR_IS_EMPTY_DIR=TRUE SET LOAD_DIR="."; IF NOT "%1"=="" ( SET LOAD_DIR=%1 ) echo %LOAD_DIR% SET VAR_IS_EMPTY_DIR= dir /B /A-D %LOAD_DIR%\*.bin > DUMP_FILES IF "%errorlevel%"=="0" ( ECHO Finded dump file. ) ELSE ( ECHO Error : Can not find dump file. DEL DUMP_FILES GOTO :EOF ) FOR /F %%i IN (DUMP_FILES) DO ( SET REPOS_FILE=%%i CALL :LOAD_REPOS ) SET REPOS_FILE= DEL /Q DUMP_FILES ECHO Successed. GOTO :EOF ::==== Functions ==== :LOAD_REPOS SET REPOS_NAME=%REPOS_FILE:~0,-4% mkdir %REPOS_NAME% ECHO %REPOS_NAME% ECHO Loading repository ^"%REPOS_NAME%^" ... svnadmin create %REPOS_NAME% svnadmin load -q %cd%\%REPOS_NAME% < %LOAD_DIR%/%REPOS_FILE% IF %errorlevel%==0 ( ECHO %DUMP_FILE% >> DUMP_FILES ) ELSE ( RMDIR /Q %REPOS_NAME% ECHO Load ^"%REPOS_NAME%^" failed. ) SET REPOS_NAME= ECHO.
再配合一下计划任务, 就可以实现定时备份了。
相关文章推荐
- linux c socket 实现http get/post请求
- 在bootstrap 中 的 radio button 设置 checked
- 斐波那契额数列及青蛙跳台阶问题
- cacati的安装
- win7 64位 apache+php配置,重头到尾,我出现的错误也让你看到(apache2.4.6win64 php5.5.5)
- JavaBean的作用域
- 功夫茶
- 开博客了!
- 简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信
- Android之分頁效果-ViewPager、Indicator、Fragment
- 泡茶
- 在Ubuntu下使用Apt-Get安装Google Chrome
- JavaBean 基础概念
- 还是不懂规矩啊!
- 子序列、子串问题
- AutoResetEvent使用
- 一篇英文论文引起的思考
- 解决The method onClick(View)... must override or implement a supertype method
- 安装Ubuntu,下载语言包等待时间过长
- struts2 json