我想使用(通常)序列从一个中等大型SVN仓库中同步/复制一个项目
svnadmin create %mirror%
rem make insecure dummy hook
echo rem dummy > %mirror%\hooks\pre-revprop-change.bat
svnsync init %mirror_url% http://svn/original/...
svnsync sync %mirror_url%
这可行,但需要很长时间,请参阅related question。事实上,在例如之前我不需要任何修改。 R = 17830。而真正的问题是原版回购在修改前似乎已损坏,我无法将其转换为hg,所以我尝试解决...
问题: 有没有办法伪造新创建的仓库(在第4行之后),因此它“相信”它已经具有修订版17830并继续使用新版本。 (也许是一些propset魔术?)在该修订之前,项目/文件夹中没有任何变化。
答案 0 :(得分:1)
svnsync将根据“当前”文件(目标库存)中的值以及svnsync revprop 0文件中的条目复制修订,该文件说明复制的最后修订版本。初始化svnsync,然后将这两个数字捏合到您想要的修订版本,它应该可以正常工作。
答案 1 :(得分:1)
这是可能的。
您需要在\db\revprops\0
和\db\revs\0
文件夹中创建虚拟转介文件,这样就不会收到错误there is no revision 17830
。
答案 2 :(得分:1)
SVN邮件列表对该主题有答案;见http://svn.haxx.se/dev/archive-2010-02/0114.shtml
答案 3 :(得分:0)
根据我的实验和答案的帮助,我认为这是不可能的。
答案 4 :(得分:0)
试试这个,(只想出来)
1)查看您正在同步的存储库的工作副本
2a)从源存储库生成一个带有svn diff -rcurrent的补丁:next (所以当前是当前版本,接下来是下一个被破坏的版本) 但是,我发现svn diff的大多数仍然有用
2b)或者,将虚拟文件添加到要同步的存储库并标记它(所以你 可以办理入住手续)
3)做一个svn ci -m'yncfix',它会碰撞你正在同步的存储库
4)此后,svnsync同步将在大部分时间继续
5)有时它会抱怨HEAD是未来的一个版本。解决这个问题 转到/ db / revprops / 0 编辑0文件, chmod + w 0 碰撞修订,....
svn:sync-last-merged-rev
V 4
8499 <--- this one, add one to it so 8500 in this example
END
6)之后,svnsync同步将继续
7)下面是我刚刚为了克服颠簸而制作的剧本, 最终结果可能不会很完美,但它会获得大部分内容。 然后,您可以通过从存储库的HEAD导出到最终结果来修复最终结果 你正在同步。
set -x
SYNC_REPO=/repo/reelbox.org-sync
SRC_WD=/src/Multimedia/Reelbox/reelbox.org
SYNC_WD=/src/Multimedia/Reelbox/reelbox.org-sync
bumpRevision()
{
SYNC_REPO_FILE=$SYNC_REPO/db/revprops/0/0
cd $SYNC_WD
svn update
CUR_REV=`svn update | awk '{print $3}' | sed s/\.$//`
echo $CUR_REV
NEXT_REV=`expr $CUR_REV + 1`
echo $NEXT_REV
cd $SRC_WD
echo svn diff -r$CUR_REV:$NEXT_REV, >>SYNCLOG
svn diff -r$CUR_REV:$NEXT_REV 2>>SYNCLOG >$SYNC_WD/patch.in
echo >>SYNCLOG
LOG=`svn log -r$NEXT_REV`
cd $SYNC_WD
patch -p0 < patch.in
RESULT=`svn diff`
echo $LOG
echo $RESULT
if [ -n "$RESULT" ]; then
echo patched
svn ci -m "syncfix:$LOG"
else
echo not patched
if [ ! -f FIXFILE ]; then
echo $NEXT_REV > FIXFILE
svn add FIXFILE
else
echo $NEXT_REV >> FIXFILE
fi
svn ci -m "syncfix:nothing patched:$LOG"
fi
}
doSync()
{
svnsync sync file://$SYNC_REPO
STATUS=$?
if [ $STATUS == 1 ]; then
ECODE=`svnsync sync file://$SYNC_REPO 2>&1 | awk '{print $2}' | sed s/:$//`
echo $ECODE
case $ECODE in
E000022)
exit 1
;;
esac
fi
return $STATUS
}
# bumpRevision
doSync
while [ $? == 1 ]; do
bumpRevision
doSync
done
Ondrej Popp