2013-02-21 19:45:37 bai_juaner 阅读数 2281
  • 通俗易懂的SVN高级教程(含配套资料)

    本教程为授权出品教程 Subversion简称SVN,是目前使用广泛的集中式版本控制系统,能够在项目开发过程中很好的辅助我们进行团队协作。SVN可以为团队开发提供代码备份、协同修改、冲突显示、增量式版本控制、权限控制、分支操作等功能。 本教程是在上一版基础上的升级,改进点包括:在Linux系统部署SVN服务器程序、更丰富的命令行操作、Eclipse特定文件全局忽略、分支管理、不通过Eclipse插件单纯使用TortoiseSVN上传Eclipse工程等等。

    137 人正在学习 去看看 张长志

Linux SVN 全备和增量备份脚本_Cisco技术 无忧网客联盟 http://www.net527.cn/a/caozuoxitong/Linux/2011/1008/20014.html

SVN备份需求分析

完整备份
==============
1.备份时在/svn_backup目录下新建 "Full+当天的日期" 为名字的目录,备份机是一个Windows机器(SVN服务器空间不足),有个共享文件夹(svnbackup)有读写权限。
  把这个svnbackup挂载到SVN服务器/svn_backup目录下,这时我们备份的时候就备份到我们Windows机器上了。
2.把备份的日志写到/svn_backup/full_backup_svn.log里去,同时要把备份时的
版本号也写进去。
3.在/svn_backup目录下新建full_repo_number目录,然后把每次备份时的每个版本库的版本号单独写一个文件
  方便增量备份时用,名字的格式:版本库的名字.number,每次备份时都对上次的版本进行覆盖(用>,而不是用>>,就是要覆盖以前的版本).

完整备份逻辑:
1.首先判断/svn_backup是否存在,如果不存在,就创建
2.判断备份机器是否是开机状态,如果没有退出备份程序,判断共享文件夹是否挂载到SVN服务器上,如果没有挂载上,重新挂载
3.然后检查当天的备份目录是否存在(是以日期为名),如果不存在就创建,如果已经存在,那就写“备份目录已经存在”写到完整备份日志(full_backup.log)里。
4.获得每个版本库的名字
5.然后判断存放每个版本库版本号的目录(full_repo_number)是否存在,不存在就创建,这个目录是为增量备份做准备,把每个版本库的版本号单独写一个文件,(每个文件对应一个版本库,一个文件内只有一个版本号,名字就是版本库的名字.number)
6.循环开始备份。
7.生成备份日志

备份日志像这样:
====================2011-09-16========================
23:16:36==> [ledge]:17433 Successfull Full Backup !!!
23:18:22==> [arch]:361 Successfull Full Backup !!!
23:19:46==> [core]:2140 Successfull Full Backup !!!

增量备份
==============
1.备份时在/svn_backup目录下新建 "Increment+当天日期" 为名字的目录
2.每次备份时都取到最新的版本号,写入到当天备份目录下的repo_version_number文件中。
3.把备份日志写到/svn_backup/increment_backup_svn.log日志文件里去,同时也是把版本号写进去
4.增量备份时都从上次完整备份的版本号开始到当天的版本号,而不是从上次增量备份时的版本号到当天备份时的版
  本号。


增量备份逻辑:
1.首先判断/svn_backup目录是否存在,如果不存在,创建
2.首先判断当天的备份目录存不存在,如果不存在就创建一个,如果存在写一个日志到日志文件中说当天备份目录已经存在,然后就退出。
3.然后判断上次的full_repo_number是否存在,如果存在,就开始备份:
a.依次取出版本库的名字,然后再取出版本最新的版本。
b.读取full_repo_number目录中的对应版本库文件的版本号(每个文件对应一个版本库,一个文件内只有一个版本号)。
c.利用备份语句进行备份
d.备份成功,把上次的版本号和本次的版本号写入到日志文件中,加上时间戳。
4.如果full_repo_number目录不存在,就创建该目录,然后依次把本次的版本号写入到该目录下对应的单独的文件。
5.生成备份日志

备份日志像这样:
=============2011-09-24_23:00:01==============
[ledge] version(from 17443 to 17447) backup successful!
[arch] version(from 389 to 414) backup successful!
[core] version(from 2140 to 2145) backup successful!

完整备份
=================
#!/bin/bash
#This scripts for full bakcup svn repository!
# DATE:2011/9/23 AUTHOR:Leo EMAIL:411765588@qq.com

#Define Variable
SVN="/usr/local/svn"
SVN_PRO="/usr/local/svn/bin/svnadmin hotcopy"
SVN_LOOK="/usr/local/svn/bin/svnlook youngest"
SVN_ROOT=/svn
SVN_BACKUP=/svn_backup
BACKUP_DATE=$(date +%Y-%m-%d)

#check up backup root directory if exist !
if [ ! -e /svn_backup ]
then
mkdir /svn_backup
fi

#check mount point if not mount
IP="192.168.1.26"
ping -c 1 -w 1 $IP &>/dev/null
if [ $? = 0 ]
then
        df -k | grep $IP &>/dev/null || mount -t cifs //$IP/svnbackup $SVN_BACKUP -o password=123456
else
echo "$(date +%Y-%m-%d-%T)==>Backup Computer[$IP] already shutdown!" >>$SVN/backup_error.log
echo " " >>$SVN/backup_error.log
        exit 1
fi

#Get repo directory name
REPO_NAME_LIST=$(ls $SVN_ROOT)

#define logfile
LOGFILE=$SVN_BACKUP/full_backup.log

#output a backup date to log file
echo "====================$BACKUP_DATE========================" >>$LOGFILE

#check up backup directory if exist then exit,if not exist mkdir
if [ -e $SVN_BACKUP/Full_"$BACKUP_DATE" ]
then
echo "$(date +%T)==>$SVN_BACKUP/Full_"$BACKUP_DATE" already exists!" >>$LOGFILE
echo "Thers is no need backup again!" >>$LOGFILE
exit 1
else
mkdir $SVN_BACKUP/Full_"$BACKUP_DATE"
fi

#mkdir full_repo_number if not exsits!
#full_repo_number purpose is leave with repo number single file for each repo
if [ ! -e $SVN_BACKUP/full_repo_number ]
then
mkdir $SVN_BACKUP/full_repo_number
fi

#define variables for full_repo_numher
FULL_REPO_VERSION=$SVN_BACKUP/full_repo_number

#start backup
for repo_name in $REPO_NAME_LIST
do
#get repo version
get_repo_version=$($SVN_LOOK $SVN_ROOT/$repo_name)

#full backup
$SVN_PRO $SVN_ROOT/$repo_name $SVN_BACKUP/Full_"$BACKUP_DATE"/$repo_name
        echo "$(date +%T)==> repository:[$repo_name] at version($get_repo_version) Successfull Full Backup !" >>$LOGFILE

#output repo version number to /svn_backup/full_repo_number directory
echo "$get_repo_version" >$FULL_REPO_VERSION/$repo_name.number
done

#output a blank line to log file
echo "" >>$LOGFILE


增量备份
===============
#!/bin/bash

#This scripts for svn increment backup
#DATE:2011/09/23 AUTHOR:Leo EMAIL:411765588@qq.com

#define variables
SVN_ROOT=/svn
BK_DIRC=/svn_backup
BK_DATE=$(date +%Y-%m-%d)
DUMP="/usr/local/svn/bin/svnadmin dump"
LOOK="/usr/local/svn/bin/svnlook youngest"

#get repo name
NAME_LIST=$(ls $SVN_ROOT)

#This Time repo version number
THIS_NUM_FILE=$BK_DIRC/Increment_"$BK_DATE"/repo_version_number

#Last Full Backup Version Number Directory
LAST_FULL_NUM=$BK_DIRC/full_repo_number

#if /svn_backup not exist then create it
if [ ! -e $BK_DIRC ]
then
mkdir $BK_DIRC
fi

#check mount point if not mount
IP="192.168.1.26"
ping -c 1 -w 1 $IP &>/dev/null
if [ $? = 0 ]
then
        df -k | grep $IP &>/dev/null || mount -t cifs //$IP/svnbackup $SVN_BACKUP -o password=123456
else
        echo "$(date +%Y-%m-%d-%T)==>Backup Computer[$IP] already shutdown!" >>$SVN/backup_error.log
        echo " " >>$SVN/backup_error.log
        exit 1
fi

#increment backup Log file
LOGFILE=$BK_DIRC/increment_backup.log

#this time date insert into log file
echo "=============$(date +%Y-%m-%d_%T)==============" >>$LOGFILE

#if this backup directory not exist then create
if [ ! -e $BK_DIRC/Increment_"$BK_DATE" ]
then
mkdir $BK_DIRC/Increment_"$BK_DATE"
else
echo "$BK_DIRC/Increment_"$BK_DATE" backup directory already exists!" >>$LOGFILE
echo "There is no need to backup again!!" >>$LOGFILE
exit 1
fi

#get repo version number date
echo " ">>$THIS_NUM_FILE
echo "=============$(date +%Y-%m-%d_%T)==============" >>$THIS_NUM_FILE

#if last full version number directory exist then start backup
#if not exist then create and insert into this time repo version number!
if [ -e "$LAST_FULL_NUM" ]
then
  for name in $NAME_LIST
  do
    thisnum=$($LOOK $SVN_ROOT/$name)
    echo "[$name] this time version_number : $thisnum" >>$THIS_NUM_FILE
    lastnum=$(cat "$LAST_FULL_NUM"/"$name".number)
    if [ $thisnum -eq $lastnum
   then
      echo "[$name] no new version!!" >>$LOGFILE
    else
  $DUMP $SVN_ROOT/$name -r $lastnum:$thisnum --incremental >$BK_DIRC/Increment_"$BK_DATE"/$name.dumpfile

       echo "[$name] version(from $lastnum to $thisnum) backup successful!" >>$LOGFILE

    fi

  done

else
mkdir $LAST_FULL_NUM
for name in $NAME_LIST
do
  thisnum=$($LOOK $SVN_ROOT/$name)
      echo "[$name] this time version_number : $thisnum" >>$THIS_NUM_FILE
  echo "$thisnum" >>$LAST_FULL_NUM/$name.number
done
echo "$LAST_FULL_NUM directory is not exist!" >>$LOGFILE
echo "create directory $LAST_FULL_NUM !!" >>$LOGFILE

fi

#output a blank line


 

echo " " >>$LOGFILE

(责任编辑:admin)

2015-07-08 15:35:57 wangmuming 阅读数 2820
  • 通俗易懂的SVN高级教程(含配套资料)

    本教程为授权出品教程 Subversion简称SVN,是目前使用广泛的集中式版本控制系统,能够在项目开发过程中很好的辅助我们进行团队协作。SVN可以为团队开发提供代码备份、协同修改、冲突显示、增量式版本控制、权限控制、分支操作等功能。 本教程是在上一版基础上的升级,改进点包括:在Linux系统部署SVN服务器程序、更丰富的命令行操作、Eclipse特定文件全局忽略、分支管理、不通过Eclipse插件单纯使用TortoiseSVN上传Eclipse工程等等。

    137 人正在学习 去看看 张长志

Linux SVN服务器做定时备份脚本:


      SVN 主服务器:

      新建一个目录 :/root/svn/

      下面增加一个脚本:add_backed.sh

      脚本内容:

    

#!/bin/bash
#set -x
#function:SVN增量备份

#Author: wangmuming

svn_repos="/data/svndata/companyname"  #版本库

backup_dir="/usr/svn/backup" #nfs挂载从服务器192.168.1.x的目录

next_backup_file="add_incremental_backup".`date +%Y%m%d`  #增量备份文件

log="$backup_dir/last_add_backed_up.log"   #日志文件

repo="$backup_dir/svn.txt"   #记录版本库最新版本

echo "********************"`date`"***************">> $log

if [ -f $repo ];then
   echo " $repo 文件存在!" >> $log 
else
  echo " $repo 文件不存在!" >> $log 
  touch  $repo
  echo "0">$repo #从0开始备份
fi

echo "SVN ADD DUMP start!">> $log

first_rev="`cat $repo`"  #备份起点
last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #注服务器版本库最新版本

backup_repo="$backup_dir/slave.txt"

if [ -f $backup_repo ];then
   echo " $backup_repo 文件存在!" >> $log 
else
  echo " $backup_repo 文件不存在!" >> $log 
  touch $backup_repo
  echo "0">$backup_repo #第一次 从0开始
fi

slave_rev=`cat  $backup_repo`  #从服务器提供的校验版本

if [ $first_rev  -ne $slave_rev ];then

  #echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev"      #主服务器备份起点版本和从数据最后版本不一致,则邮件报警
  echo  "SVN Slaves is error, please check. "

else

     if [ $first_rev -le $last_rev ];then
       /usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file  #上一次记录的版本,到最新版本的增量备份
     else
	  echo " no update record!" >> $log
          rm -rf $backup_dir/access.conf
          rm -rf $backup_dir/auth.conf
          cp $svn_repos/access.conf  $backup_dir/
          cp $svn_repos/auth.conf  $backup_dir/
          exit 0 
     fi

fi

echo "Fist:$first_rev">> $log

echo "Last:$last_rev">> $log #写入日志文件

#dump_rev="`/usr/bin/expr $last_rev+1`" #下一次备份起点,重点 +1版本,否则报错
dump_rev=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`

echo $dump_rev>$repo  #覆盖上一次备份起点

#删除之前的增量备份文件

rm -rf $backup_dir/add_incremental_backup.$(date +%Y%m%d --date='1 days ago')

rm -rf $backup_dir/access.conf
rm -rf $backup_dir/auth.conf
cp $svn_repos/access.conf  $backup_dir/
cp $svn_repos/auth.conf  $backup_dir/

    增加定时任务:crontab –e

  //每天的1点十分执行一次  这个看公司需求 具体的可以设置为多少分钟一次都是可以的

    


  SVN从服务器:

新建一个目录 :/root/svn/

      下面增加一个脚本:load_backed.sh

      脚本内容:

      

#!/bin/bash
#set -x
#function:SVN增量导入

#Author: wangmuming

svn_repos="/data/svndata/companyname" #从服务器192.168.1.*版本库目录

backup_dir="/usr/svn/backup" #nfs共享主服务器目录

backup_file="add_incremental_backup".`date +%Y%m%d`  #增量备份文件

log="$backup_dir/last_load.log" #日志文件

echo "********************"`date`"***************">> $log

echo "SVN load start!">> $log

first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"

echo "First:$first_rev">> $log

if [ -f $backup_dir/$backup_file ];then

  /usr/local/subversion/bin/svnadmin load $svn_repos < $backup_dir/$backup_file 2>&1 >>$log #导入增量备份文件

else
  echo " $backup_dir/$backup_file 文件不存在! no dump to load!" >> $log 
  exit 0
fi

last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"

echo "Last:$last_rev">> $log #记录最新版本号

#repo_slave=$last_rev+1 #作为检测主服务器和从服务器数据是否同步的判断数据
repo_slave=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`

echo "$repo_slave">$backup_dir/slave.txt

echo "********************"`date`"***************">>$log

#删除增量备份文件

rm -rf $backup_dir/add_incremental_backup.*

echo "SVN load Eed!">> $log

    

 增加定时任务:crontab –e

     30 4 * * * /bin/sh /root/svn/load_backed.sh //将主服务器上的导出内容导入到备份的SVN服务器上

       注意:这个导入的时间点要晚与导出的时间段;


在备份的SVN服务器上设置一个文件共享服务:

            

 # cat /etc/exports 
           /usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)

# cat /etc/exports 

    /usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)

   启动文件共享服务:

        service nfs start

  SVN主服务器:

           mount  IP:/usr/svn/backup  /usr/svn/backup

   /usr/svn/backup 目录内容:

    

-rw-r--r-- 1 root root      17058 7月   8 01:14 last_add_backed_up.log
-rw-r--r-- 1 root root    6704579 7月   8 04:30 last_load.log
-rw-r--r-- 1 root root          5 7月   8 04:30 slave.txt
-rw-r--r-- 1 root root          5 7月   8 01:14 svn.txt

     到此,基于Linux SVN的服务器之间的备份完成。


2008-08-06 17:35:00 stephenxu111 阅读数 4963
  • 通俗易懂的SVN高级教程(含配套资料)

    本教程为授权出品教程 Subversion简称SVN,是目前使用广泛的集中式版本控制系统,能够在项目开发过程中很好的辅助我们进行团队协作。SVN可以为团队开发提供代码备份、协同修改、冲突显示、增量式版本控制、权限控制、分支操作等功能。 本教程是在上一版基础上的升级,改进点包括:在Linux系统部署SVN服务器程序、更丰富的命令行操作、Eclipse特定文件全局忽略、分支管理、不通过Eclipse插件单纯使用TortoiseSVN上传Eclipse工程等等。

    137 人正在学习 去看看 张长志

SVN增量备份方案
1)SVN目录的数据文件名是从0开始一个一个递增的(db/revs下面),一个版本(一次提交)一个新文件,旧的不变,所以可以用自动增量备份工具(比如Always sync)备份。

2)使用svnsync工具,这是SVN自己提供的同步工具,需要对每个版本库做以下工作
   对备份服务器:
   a. 创建空的同名版本库,可以用svnadmin create ... (不能从主服务器直接把版本库目录拷过来)
   b. 在新建版本库hooks目录下建立pre-revprop-change.bat(windows下,linux下不用后缀文件名),内容为exit 0

   在主服务器,分别执行:
   a. 同步初始化:svnsync init http://192.168.0.2/svn/proj1 http://192.168.0.1/svn/proj1 (前者是备份服务器)
   b. 同步:svnsync sync http://192.168.0.2/svn/proj1
   c. 如果要设置成每次提交自动备份到备份服务器,可以在主服务器hooks目录下建立一个post-commit.bat文件,内容为svnsync sync http://192.168.0.2/svn/proj1

   注意,如果主服务器本地保存了默认登录的用户名/密码(这个要清除的话可以使用TortoiseSVN的配置里面有个清除保存数据的地方),svnsync工具会自动使用,否则会提示输入,你也可以在其参数里显示指定--username username --password password。特别要注意,使用的用户名/密码应该在主机上有全版本库读权限,在备份库有写权限,由于有些目录的权限排斥传递的原因,好像在复杂权限下,svnsync sync时经常有失败的问题。

2019-01-07 22:31:52 CPPCPPCPPCPP 阅读数 914
  • 通俗易懂的SVN高级教程(含配套资料)

    本教程为授权出品教程 Subversion简称SVN,是目前使用广泛的集中式版本控制系统,能够在项目开发过程中很好的辅助我们进行团队协作。SVN可以为团队开发提供代码备份、协同修改、冲突显示、增量式版本控制、权限控制、分支操作等功能。 本教程是在上一版基础上的升级,改进点包括:在Linux系统部署SVN服务器程序、更丰富的命令行操作、Eclipse特定文件全局忽略、分支管理、不通过Eclipse插件单纯使用TortoiseSVN上传Eclipse工程等等。

    137 人正在学习 去看看 张长志

Linux下svn服务器迁移

1.介绍迁移方式:

1.由于项目工作需要进行svn服务器的迁移,对此简要介绍svn服务器的迁移方案。
2.主要迁移方式:

  • svnadmin dump
  • svnadmin hotcopy
  • svnsync

3.【svnadmin dump】是官方推荐的备份方式。

  • 优点:比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
  • 缺点:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复,建议在版本数比较小的情况下使用这种备份方式。

4.【svnadmin hotcopy】只能进行全量拷贝,不能进行增量备份;

  • 优点:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
  • 缺点:比较耗费硬盘,需要有较大的硬盘支持。

5.【svnsync】直接同步源机器代码库,实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。

  • 优点:当制作成2个镜像库的时候起到双机实时备份的作用;
  • 缺点:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。

6.实际上在Linux下将svn从一台源服务器迁移到另一台目标服务器的操作过程分2步:

1)安装SVN服务端:根据源服务器的svn版本,在目标服务器安装同样版本或者相近版本的SVN;  
2)同步SVN仓库:同步源服务器的SVN代码仓库到目标服务器上。  

2.具体步骤:

由于本人目前处理的svn仓库容量也就几个G而已,所以本文就针对自己的需求以【svnadmin dump】举例进行svn的迁移介绍。

2.1安装svn

1.下面就先具体地介绍安装配置svn服务端,待操作完这一步后续在待迁移目标服务器上安装配置svn服务端就比较方便顺手了。

1.yum方式安装或者源码编译安装svn服务端。这里以yum方式安装为例(假设当前在Linux下已经切换至root用户):  
$yum install subversion	#即可安装svn服务端
$svn help				#查看svn帮助手册
$svn --version			#查看svn当前版本
2.创建svn仓库目录:
$mkdir -p /home/www/svn/web/
$svnadmin create /home/www/svn/web/
3.经【上述第二步】后在/home/www/svn/web下会生成一个svn的仓库工作空间。使用以下查看目录树:  
$tree /home/www/svn/web
4.显示的目录树类似以下结果:
[root@bogon web]# tree /home/www/svn/web
/home/www/svn/web
├── conf
│   ├── authz
│   ├── authz.bak
│   ├── passwd
│   ├── passwd.bak
│   ├── svnserve.conf
│   └── svnserve.conf.bak
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── rep-cache.db
│   ├── revprops
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       └── 2
│   ├── revs
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       └── 2
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt

10 directories, 35 files
[root@bogon web]# 
5./home/www/svn/web/conf下以.conf结尾的文件:svn仓库的配置。
conf
├── authz:权限控制文件
├── authz.bak
├── passwd:帐号密码文件
├── passwd.bak
├── svnserve.conf:SVN服务配置文件
└── svnserve.conf.bak
6.编辑authz权限控制:
$vim /home/www/svn/web/conf/authz
[/]					:仓库下所有文件/文件夹
yunwei=rw			:【yunwei】用户具有读写权限
test=r				:【test】用户具有只读权限
*=					:除上述俩用户外,其他用户没有任何权限
7.编辑passwd账号密码:
$vim /home/www/svn/web/conf/passwd
[users]
yunwei=yunwei		:用户名=密码
8.编辑svnserve.coonf服务配置:
$vim /home/www/svn/web/conf/svnserve.conf
[general]
anon-access=none			:匿名用户没有访问权限
auth-access=write			:已经被授权的用户具有写权限操作的权利
password-db=passwd			:密码信息的文件路径(路径相对于本svnserve.conf而言)
authz-db=authz				:访问控制文件信息的文件路径(路径相对于本svnserve.conf而言)
realm=/home/www/svn/web/	:认证命名空间,svn会在认证提示里显示。
9.启动svn服务端:
$svnserve -d -r /home/www/svn/web  #-d:守护进程;-r:后台运行
10.查看svn进程:
$ps -ef|grep svn
11.如果想要停掉SVN服务,可以下面这样子操作:
$killall svnserve
12.【Windows客户端TortoiseSVN】连接svn服务端,进行检出获取仓库数据:
1)对话框输入地址:【svn://ip地址:端口】    
#ip地址:待检出的svn服务端ip地址	
#端口:默认3690
#这样子一来就可以用来获取这个svn服务端的仓库数据。
2)输入【用户名,如:yunwei】,【密码,如:yunwei】。即可检出。

2.准备好源服务器和目标服务器。本文假设svn源服务器:10.80.80.238,svn目标服务器:10.80.80.234,svn目标服务器已经完成了svn服务端安装。

2.2使用【svnadmin dump】迁移svn代码仓库

  • 前提说明:源服务器10.80.80.238的svn仓库目录【/home/svn/】,待操作的目标服务器10.80.80.234仓库目录【/home/www/svn/web】,俩服务器svn服务端口均使用默认端口3690。
  • 具体细节:
    1)$mkdir -p /home/linux/downloads/ #在源服务器上操作【创建目录】用于存放备份出来的仓库
    2)$svnadmin dump /home/svn/ > /home/linux/downloads/svnRepos.dump.backup
    #在源服务器备份svn仓库
    #svnRepos.dump.backup :已备份好的svn仓库
    3)使用【scp把/home/linux/downloads/svnRepos.dump.backup从源服务器传输到目标服务器】或者【sz下载至本地然后rz上传至目标服务器】。
    4)假设源服务器的仓库已经备份至目标服务器的【/home/linux/svnbackupdir/svnRepos.dump.backup
    5)加载到目标服务器仓库:
    $svnadmin load /home/www/svn/web < /home/linux/svnbackupdir/svnRepos.dump.backup
    6)拷贝源服务器【/home/svn/conf】下的3个配置文件至目标服务器【/home/www/svn/web/conf】。
    7)启动目标服务器:
    $svnserve -d -r /home/www/svn/web/
  • 由于服务端svn的ip地址变更了导致原有的客户端如果不做配置变更那就无法连接服务端,所以客户端想要连接到目标服务器svn需进行类似如下的操作变更:
    • 1)Windows下【TortoiseSVN】对仓库目录做变更【鼠标右键】:


      【确定】完即可。
    • 2)Linux下,对客户端连接变更:

2.1)本地仓库路径:/home/linux/downloads/svntestprojects/pro1dir/】。使用【$svn info】查看连接信息,结果类似如下(可看到源服务器ip:10.80.80.238):

[root@localhost pro1dir]# svn info
Path: .
Working Copy Root Path: /home/linux/downloads/svntestprojects/pro1dir
URL: svn://10.80.80.238
Repository Root: svn://10.80.80.238
Repository UUID: d40b338c-41be-439f-aade-8b6a1aebb690
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: yunwei
Last Changed Rev: 2
Last Changed Date: 2019-01-07 15:11:39 +0800 (Mon, 07 Jan 2019)



2.2)变更:
$svn switch --relocate svn://10.80.80.238 svn://10.80.80.234
#过程中输入本地【root】密码->输入目标服务器svn被授权的用户名和密码->进行验证->验证成功->接着连接到目标服务端svn即可。
$svn info

[root@localhost pro1dir]# svn info
Path: .
Working Copy Root Path: /home/linux/downloads/svntestprojects/pro1dir
URL: svn://10.80.80.234
Repository Root: svn://10.80.80.234
Repository UUID: d40b338c-41be-439f-aade-8b6a1aebb690
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: yunwei
Last Changed Rev: 2
Last Changed Date: 2019-01-07 15:11:39 +0800 (Mon, 07 Jan 2019)

3.补充:

2018-01-16 14:25:31 m0_38113129 阅读数 170
  • 通俗易懂的SVN高级教程(含配套资料)

    本教程为授权出品教程 Subversion简称SVN,是目前使用广泛的集中式版本控制系统,能够在项目开发过程中很好的辅助我们进行团队协作。SVN可以为团队开发提供代码备份、协同修改、冲突显示、增量式版本控制、权限控制、分支操作等功能。 本教程是在上一版基础上的升级,改进点包括:在Linux系统部署SVN服务器程序、更丰富的命令行操作、Eclipse特定文件全局忽略、分支管理、不通过Eclipse插件单纯使用TortoiseSVN上传Eclipse工程等等。

    137 人正在学习 去看看 张长志

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方式

SVN迁移需要做如下操作:
1. 将原来的Repository导出为一个文件dumpfile 。
#svnadmin dump 原先的repos的目录路径(/repository/directory) > dumpfile
#svnadmin dump /home/svn/test/ > /home/backup/test_20180116

2. 在另外一台机器上配置同样的SVN服务器。

3. 将dumpfile导入到新的repository 目录中。
#svnadmin load 新建的repos的目录路径(/repository/directory) < dumpfile
#svnadmin load /home/svn/test/ < /home/backup/test_20180116

4. 将原先服务器的配置文件备份后复制到新服务器中
#/home/svn/test/conf目录下
authz、passwd、svnserve.conf文件

svnadmin hotcopy方法

1. 备份
#svnadmin hotcopy /home/svn/test/  /home/backup/test_20180116 –clean-logs
如果你传递–clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。
你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。
2. 还原
#svnadmin hotcopy /home/backup/test_20180116  /home/backup/test

SVN备份与恢复

阅读数 311

svn备份脚本每天

阅读数 477

svn备份和还原

阅读数 246

没有更多推荐了,返回首页