我正在尝试创建一个在线svn存储库的镜像存储库,这样我就可以拥有能够同步在线repo上更改的源代码。并开始从镜像回购中签出代码。对其进行更改。
在使用svnsync
执行了这些步骤之后,在我实际执行了第一个svnsync sync
命令之后,没有任何源代码被复制到镜像repo。
我是误解了svnsync
的使用,还是误解了所有的svn镜像机制?如何从镜像回购中签出代码。然后开始工作?
注意我做了以下操作来创建镜像svn repo。
$ svnadmin create dest
$ cat <<'EOF' > dest/hooks/pre-revprop-change
#!/bin/sh
USER="$3"
if [ "$USER" = "svnsync" ]; then exit 0; fi
echo "Only the svnsync user can change revprops" >&2
exit 1
EOF
$ chmod +x dest/hooks/pre-revprop-change
$ svnsync init --username svnsync file://`pwd`/dest http://thesource/source/repos
$ svnsync sync file://`pwd`/dest
Ahmed,
我建议不要像git那样处理svn存储库,在git中可以来回推送/拉取提交。
如果必须处理本地脱机镜像,那么git-svn就是一个解决方案,但首先要仔细学习。
我发现了使用svnsync
创建镜像的步骤中缺少的步骤。如以下博客文章和文章中的第二条评论所述,通过使用以下命令转储公共存储库解决了问题:
$ svnrdump dump http://sourceRepo/svn/repo > /tmp/sourceDump
我们可以选择性地使用CCD_ 6或CCD_。之后,我们开始使用以下命令创建镜像存储库:
$ svnadmin create destRepo
$ cat <<'EOF' > /pathToCreatedRepo/destRepo/hooks/pre-revprop-change
#!/bin/sh
USER="$3"
if [ "$USER" = "svnsync" ]; then exit 0; fi
echo "Only the svnsync user can change revprops" >&2
exit 1
EOF
$ chmod +x /pathToCreatedRepo/destRepo/hooks/pre-revprop-change
之后,我们需要使用以下命令将转储文件导入到新的destRepo
中
$ svnadmin load /pathToCreatedRepo/destRepo < /tmp/sourceDump
我们现在将使用以下命令进行同步初始化:
$ svnsync initialize --allow-non-empty file:///pathToCreatedRepo/destRepo http://sourceRepo/svn/repo
注意我们必须在此处添加参数--allow-non-empty
,以使SVN能够在先前加载的现有转储上同步。我们现在可以在新的destRepo
上进行普通的sync
调用
$ svnsync sync file:///pathToCreatedRepo/destRepo
我现在可以从镜像存储库中签出代码了:)