Как я могу сделать резервную копию репозиториев SVN шаг за шагом .... я хочу сделать резервную копию самого репозитория .... я не хочу делать резервную копию его как папки ....
шаг 1 Создайте сценарий или командный файл, который запускает команду
svnadmin dump REPOS_PATH > backupfile
svnadmin - это программа, которая поставляется с svn, она будет в папке bin
backupfile - это файл, в который будет выгружен репозиторий
REPOS_PATH - расположение репозитория
видеть http://svnbook.red-bean.com/en/1.1/re31.html Больше подробностей
шаг 2. Запустите сценарий / пакетный файл, чтобы проверить резервную копию.
шаг 3. Убедитесь, что резервная копия работает, запустив команду
svnadmin load test_path < backupfile
Теперь попробуйте репозиторий, созданный в test_path, чтобы убедиться, что он работает нормально - он должен и в качестве бонуса должен работать с более новыми версиями svn.
Следуя сценарию, который можно сохранить как: svnbackup.sh
#!/bin/bash
appname=`basename $0`
#
# Set some defaults
#
increment=100
start=""
default_history_file="last_saved"
history_file=""
dumpfilepath="."
dumpfilename="dumpfile"
verbose=false
sshopts=""
identity=""
#
# Function to explain how to use the program
#
function usage () {
echo
echo "$appname [-h]"
echo "$appname [-v] [-i increment] [-s start_rev] [--scp remote] [--identity ssh-key] [--ssh-opts ssh options] [--history-file file] [--out-dir directory name] [--compress (gzip|bzip2)] [--file-name dumpfile-base-name] svn_repository_path"
cat - <<EOF
This script dumps a subversion repository to a series of compressed
files. It uses a local file to remember the last changeset dumped so
the script can be used to generate files for backups.
Using the --scp option, the backup files can be generated on one
machine and copied to a backup server once dumped.
-v -- Verbose mode
-i increment -- How many revisions to include in each dump file.
--file-name base -- Base name for dump files, defaults to "dumpfile".
-s start_rev -- First revision to dump.
--scp remote -- Location for remote backups. Files are transfered via scp,
then removed from the local directory.
--identity -- Identity file for scp transfer
--ssh-opts -- options to use for scp
--history-file -- path and filename of historyfile to use
--out-dir -- path where svn dump files should be written, defaults to "."
--compress -- compression method (gzip or bzip2, defaults to bzip2)
EOF
echo
echo "Example:"
echo " $appname -v -i 100 --scp user@backupserver:/backups/svn /svn/Project"
echo
exit $1
}
compress_app="bzip2"
compress_ext="bzip2"
#
# Process arguments
#
while [ $# -gt 0 ]
do
opt="$1"
case "$opt" in
-h) usage 0;;
-i) increment=$2;
shift;;
-s) start=$2;
shift;;
--scp) dest="$2";
shift;;
--identity) identity="$2";
shift;;
--ssh-opts) sshopts="$2";
shift;;
--history-file) history_file="$2";
shift;;
--out-dir) dumpfilepath="$2";
shift;;
--file-name) dumpfilename="$2";
shift;;
-v) verbose=true;;
--compress)
case "$2" in
bzip2|bz|bzip)
compress_app="bzip2";
compress_ext="bzip2";;
gzip|gz)
compress_app="gzip";
compress_ext="gz";;
esac;
shift;;
*) break;;
esac
shift
done
repository="$1"
if [ -z "$repository" ]
then
echo "Failed: Repository argument required"
usage 1
fi
if [ -z "$history_file" ]
then
history_file="$dumpfilepath/$default_history_file"
fi
if [ "x${start}" = "x" ]
then
# if [ -s $history_file ] #Blocco Rinominato per NON Tenere Conto Last_saved
# then
# loop_first=`cat $history_file`
# else
# loop_first=0
# fi
loop_first=0
else
loop_first=$start
fi
youngest=`svnlook youngest "$repository"`
$verbose && echo "Backing up: $repository"
$verbose && echo " From: $loop_first"
$verbose && echo " To: $youngest"
if [ "$dest" != "" ]
then
$verbose && echo " Dest: $dest"
fi
if [ "$identity" != "" ] ; then
$verbose && echo " Identity: $identity"
fi
if [ "$sshopts" != "" ] ; then
$verbose && echo " ssh opts: $sshopts"
fi
$verbose && echo "Hist. file: $history_file"
$verbose && echo "Chunk size: $increment"
#
# Function to do the backup for one set of revisions
#
function backup_revs () {
typeset first=$1
typeset last=$2
typeset repo=$3
if [ "$first" != "0" ]
then
incremental="--incremental"
fi
repo_name=`basename "$repo"`
dumpfile="$dumpfilepath/${dumpfilename}-${repo_name}-${first}-${last}.${compress_ext}"
$verbose && echo -n "Dumping ${first}:${last} ..."
svnadmin dump -q "$repo" $incremental --revision ${first}:${last} \
| "$compress_app" > "$dumpfile"
RC=$?
$verbose && echo
if [ $RC -ne 0 ]
then
rm -f "$dumpfile"
return $RC
fi
$verbose && echo "Created $dumpfile"
if [ "$dest" != "" ]
then
if [ -z "$identity" ] ; then
scp $sshopts "$dumpfile" "$dest"
else
scp $sshopts -i $identity "$dumpfile" "$dest"
fi
RC=$?
rm -f "$dumpfile"
fi
return $RC
}
#
# Do the incremental dumps
#
if [[ $youngest -eq $loop_first ]]
then
$verbose && echo "No new changesets to dump"
exit 0
fi
let loop_last=($loop_first + $increment)
if [[ $loop_first -ne 0 ]]
then
let loop_first=($loop_first + 1)
fi
while [[ $loop_first -le $youngest ]]
do
if [ $loop_last -lt $youngest ]
then
# A full "increment"
backup_revs $loop_first $loop_last "$repository" || exit 1
#echo $loop_last > $history_file
else
# In case the last few revs do not make up a full "increment"
backup_revs $loop_first $youngest "$repository" || exit 1
#echo $youngest > $history_file
fi
let loop_first=($loop_last + 1)
let loop_last=($loop_last + $increment)
done
exit 0
Это оно.
Вы можете восстановить данные на той же или подобной машине (например, windows -> windows). если вы хотите выполнить восстановление из Windows в Linux (скажем), то вместо этого вы захотите сбросить и загрузить репозиторий. Вам все равно нужно будет скопировать остальную часть каталога.
Хорошие предложения использовать rsync для копирования всего (но вам придется останавливать сервер, чтобы всегда получать хорошую резервную копию) или использовать svnsync, который является отличной утилитой инкрементного резервного копирования для SVN. (вам все равно придется скопировать хуки и конфигурацию - я rsync их и svnsync репо)
Просто создайте копию каталога svn.
Редактировать:
Как уже упоминалось - сначала нужно остановить svn-сервер.
Вам также необходимо остановить apache и ssh, если вы используете их для доступа к своему репо.