添加源路径时,部分svnsync在修订时失败

时间:2013-01-20 09:30:08

标签: svn svnsync

我正在尝试制作外部svn存储库的部分镜像。根据{{​​3}},从svn 1.5开始,这应该是可能的。

我遵循http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.reposadmin.maint.replication.svnsync-partial中描述的所有步骤,但我没有使用'svnsync'用户。相反,所有命令都作为本地用户'svn'执行,并使用file:// protocol访问本地存储库。

所以,这就是我的所作所为:

$ svnadmin create /var/svn/mirrors/foreign-mirror

$ cat > /var/svn/mirrors/foreign-mirror/hooks/pre-revprop-change <<EOF
#!/bin/sh
USER="$3"
if [ "$USER" = "svn" ]; then exit 0; fi
echo "Only the svn user may change revision properties" >&2
exit 1
EOF

$ chmod +x /var/svn/mirrors/foreign-mirror/hooks/pre-revprop-change

$ cat > /var/svn/mirrors/foreign-mirror/hooks/start-commit <<EOF
#!/bin/sh
USER="$2"
if [ "$USER" = "svn" ]; then exit 0; fi
echo "Only the svn user may commit new revisions" >&2
exit 1
EOF

$ chmod +x /var/svn/mirrors/foreign-mirror/hooks/start-commit

$ svnsync initialize \
file:///var/svn/mirrors/foreign-mirror \
https://svn.foreign.com/svn/Projects/X/Y \
--source-username #### --source-password ####

$ svnsync synchronize \
file:///var/svn/mirrors/foreign-mirror \
--non-interactive --source-username #### --source-password ####
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
...
Committed revision 80089.
Copied properties for revision 80089.
Committed revision 80090.
Copied properties for revision 80090.
svnsync: Path 'Projects' not present

查看svn日志:

$ svn log https://svn.foreign.com/svn/Projects/X/Y -v -r80091
------------------------------------------------------------------------
r80091 | John.Doe | 2011-09-27 06:42:21 +0200 (Tue, 27 Sep 2011) | 1 line
Changed paths:
   A /Projects/X/Y

如果我理解正确,重播提交#80091会失败,因为它无法找到/ Projects。这让我很困惑。部分复制是不是要跳过不存在的路径?

我在ubuntu linux(目标存储库)上运行svn 1.6.6并完全控制它。 我无法控制源存储库,用户名和密码只能访问/ Projects / X / Y及以下版本。无法访问/ Projects或/ Projects / X。

有没有办法克服这个问题,也许是为了在特定版本中启动复制?任何建议都非常感谢。

1 个答案:

答案 0 :(得分:2)

我对svnsync问题没有任何建议,但你正在尝试

"I'm trying to make a partial mirror of an external svn repository.". 

您是否尝试过svk。即使它已停产项目。它是制作subversion存储库的部分镜像的一个非常好的工具。我偶尔用它来获得子项目的部分历史。假设你有以下的subversion目录结构。

trunk
  MainProject
  HelperTools
    ImportantToolAsSubProject
branches
tags

svk只能创建/ trunk / HelperTools / ImportantToolAsSubProject的subversion历史记录。如果此目录只有100个提交。创建的subversion存储库只有100个提交。