【问题标题】:How to skip initial revisions in svnsync sync (to fix broken repository)如何在 svnsync sync 中跳过初始修订(修复损坏的存储库)
【发布时间】:2011-07-03 13:47:31
【问题描述】:

我想使用(通常)序列从中等大型 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。而真正的问题是,原来的 repo 在这次修订之前似乎已经损坏,我无法将其转换为 hg,所以我尝试解决...

问题: 有没有办法伪造新创建的回购(在第 4 行之后),所以它“相信”它已经有修订 17830 并继续使用更新的回购。 (也许是一些道具魔术?)在该修订之前,项目/文件夹中没有任何更改。

【问题讨论】:

    标签: svn repository svnsync


    【解决方案1】:

    svnsync 将根据(目标仓库的)“当前”文件中的值复制修订,以及 svnsync revprop 0 文件中的条目,说明哪个是最后复制的修订。初始化 svnsync,然后将这两个数字修改为您想要的版本,它应该可以按您的意愿工作。

    【讨论】:

    • 我修改了\db\current\db\revprops\0\0 以在我需要的版本号(17830)之前包含一个版本号。 SVN 没有抱怨它,一切看起来都有效。但是当我打电话给svnsync sync ... 时,它说没有修订17830。我同意,新回购中没有,这就是重点。 :-(
    • 几乎正确 - 将这些文件中的数字设置为您的 repo 中的当前 revnum。使用 'svnlook youngest' 获取当前 revnum,在这 2 个文件中使用这个数字。
    • 我不明白。我不想要最小的,我想要 rev 17830 之后的一切。
    【解决方案2】:

    这是可能的。

    您需要在文件夹 \db\revprops\0\db\revs\0 中创建虚拟 rev 文件,以免出现错误 there is no revision 17830

    【讨论】:

    • 您能详细说明一下吗?
    【解决方案3】:

    SVN 邮件列表有该主题的答案;见http://svn.haxx.se/dev/archive-2010-02/0114.shtml

    【讨论】:

      【解决方案4】:

      根据我的实验并得到答案的帮助,我相信这是不可能的。

      【讨论】:

        【解决方案5】:

        试试这个,(刚刚想通了)

        1) 签出要同步到的存储库的工作副本

        2a) 使用 svn diff -rcurrent:next 从源存储库生成补丁 (所以 current 是当前版本,next 是下一个损坏的版本) 但是,我发现的大部分 svn diff 仍然有效

        2b) 或者,将一个虚拟文件添加到您要同步到的存储库并标记它(这样您 可以签到)

        3) 执行 svn ci -m 'syncfix' 会影响您正在同步到的存储库

        4) 此后,svnsync sync 大部分时间都会继续

        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
        

        翁德雷·波普

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-11
          • 2012-01-06
          • 1970-01-01
          • 2020-04-22
          • 2016-05-31
          • 2011-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多