svn 迁移但转储存储库的一部分

Posted

技术标签:

【中文标题】svn 迁移但转储存储库的一部分【英文标题】:svn migrating but dump part of the repository 【发布时间】:2014-10-05 15:38:30 【问题描述】:

我使用 svnadmin 转储/加载周期将存储库从服务器 1 迁移到服务器 2,但我只是转储了最新的 100 个版本(600~700)。我发现新存储库的修订版是从 1 到 100,而不是从 600 到 700。这是问题所在,在重新定位工作副本后,我对其进行了更新,然后出现“No such revision 700”错误。好像是新仓库版本错误?

有什么建议吗?

【问题讨论】:

【参考方案1】:

在加载转储之前,您似乎需要 generate empty padding revisions 为您的 SVN 存储库:

但是,当它被加载回新存储库 (svnadmin load mynewrepo < repo.dump) 时,修订从 1 开始重新编号,因此修订 1234 变为修订 1。这是不可取的,因为我有现有的错误和更改日志引用到 SVN 修订号,所以我创建了一个小脚本 (svn-generate-empty-revisions) 来创建一些空修订。

在使用中,将其输出拼接到 SVN 转储的开头是最有用的,例如:

svnadmin dump -r 1234:HEAD /path/to/repo > repo.dump
# Extract the first few lines of the dump, which contain metadata
head -n 4 repo.dump > repo-padded.dump
# Splice in some empty "padding" revisions to preserve revision numbering
# Note that the first revision is 1234, so we want 1233 empty revisions at start
./svn-generate-empty-revisions.sh 1233 >> repo-padded.dump
# Add the rest of the original repository dump to the file
tail -n +4 repo.dump >> repo-padded.dump

svn-generate-empty-revisions 脚本本身:

#!/bin/bash
# Generate a number of empty revisions, for incorporation into an SVN dump file
# 2011 Tim Jackson <tim@timj.co.uk>

if [ -z "$1" ]; then
    echo "Usage: svn-generate-empty-revisions.sh NUMREVISIONS [TIMESTAMP]"
    exit 1
fi

timestamp=$(date +%Y-%m-%dT%H:%M:%S.000000Z)
if [ ! -z "$2" ]; then
    timestamp=$2
fi

for i in $(seq 1 $1); do
cat <<EOF
Revision-number: $i
Prop-content-length: 112
Content-length: 112

K 7
svn:log
V 38
This is an empty revision for padding.
K 8
svn:date
V 27
$timestamp
PROPS-END

EOF
done

【讨论】:

确保新文件可执行:chmod +x svn-generate-empty-revisions.sh

以上是关于svn 迁移但转储存储库的一部分的主要内容,如果未能解决你的问题,请参考以下文章

在存储库的 SVN 转储期间观察到错误 (Visual SVN)

svndumpfilter - 不支持的转储文件版本

将 Subversion 存储库的一部分迁移到新服务器并重新路径

如何导出具有依赖项的 SVN 存储库的一部分?

移动了存储库。我是否使用SVN交换机,SVN重定位或其他所有内容

Apache Lucene 存储库的 SVN 转储