我有一个非常大的存储库,我们将开始拆除回购中的每个项目以分离回购。但是我遇到了一些关于Node-copyfrom-rev的问题,这些问题在转储/加载时没有正确匹配,导致以下结果:
svnadmin: E160006: Relative source revision -18169 is not available in current repository
svnadmin: E160013: File not found: transaction '37-1c', path 'tags/1.6.1/file.php'
我已经做了一些努力来重写dump-files和revision-definitions,但它似乎没有正确匹配,因此难以自动化该过程。欢迎提出任何变更建议,但请注意,使用svndumpfilter并不是一个真正的选择,因为回购的大小只需要几个小时来突破一个项目,这个仓库包含数千个。
#!/bin/bash
project=$1
repo=/root/svn-copy/oldrepo
rm -fr $project*
mkdir $project
cd $project
svnadmin create $project
i=1
svn log file://$repo $project | grep -e ".*r[0-9].*|.*" | awk '{ print substr($1,2) }' | sort -g | while read rev; do
revs[$rev]=$i
svnadmin dump $repo --quiet -r $rev --incremental >> $project.$rev.bak
# Rewrite revision number to ease rewrite of Node-copyfrom
perl -pi -e "s/Revision-number: $rev/Revision-number: $i/;" $project.$rev.bak
# Rewrite node-paths
perl -pi -e "s/Node-path: $project\//Node-path: /;" $project.$rev.bak
# Rewrite Node-copyfrom-path
perl -pi -e "s/Node-copyfrom-path: $project\//Node-copyfrom-path: /;" $project.$rev.bak
# Rewrite Node-copyfrom-rev
for rev in $(grep Node-copyfrom-rev $project.$i.bak | awk '{ print $2 }'); do
perl -pi -e "s/Node-copyfrom-rev: $rev/Node-copyfrom-rev: ${revs[$rev]}/;" $project.$i.bak
done
# Remove prop for old project-folder
sed -i "/Node-path: $project/,/PROPS-END/d" $project.$rev.bak
svnadmin load --ignore-uuid $project < $project.$rev.bak
let i=$i+1
rm -fr $project.$rev.bak
done
svnadmin setuuid $project
请注意,版本号的重写有一定程度上减轻了node-copyfrom-rev,但并不完全,因为有时在转储这种方式时,node-copyfrom-repo指向错误。