1

( 'd)リポジトリsvn:externalsのローカルコピーに対する管理者権限を持っている場合、既存のリビジョンのプロパティを修正するにはどうすればよいですか?svnsync

次のような名前が付けられfixup.sh、ローカルリポジトリのルートパス(、、、などを含む同じフォルダ)内に配置さconf/れるスクリプトdb/を使用してアイデアを示します。hooks/

#!/usr/bin/env bash
CURRBASENAME=$(dirname $(readlink -e $0))
svn propget -R svn:externals "file://$CURRBASENAME"|while read extrnls; do
    [[ -n "$extrnls" ]] || continue
    LOC=$(echo "$extrnls"|cut -f 1 -d ' ')
    NME=$(echo "$extrnls"|cut -f 3 -d ' ')
    REV=$(echo "$extrnls"|cut -f 4 -d ' ')
    [[ "${REV:0:2}" == "-r" ]] || REV=''
    [[ -z "$REV" ]] && EXT=$(echo "$extrnls"|cut -f 4 -d ' ')
    [[ -n "$REV" ]] && EXT=$(echo "$extrnls"|cut -f 5 -d ' ')
    LOCALIZED="^/${EXT##*/svn/}"

    svnmucc -n -m "Adjusting svn:externals $NAME to: $LOCALIZED $REV" propset svn:externals "$NME $REV $LOCALIZED" "$LOC"
done

エスケープしない限り、スクリプトはスペースを含むパスでは機能しないことに注意してください。

残念ながら、この種の変更は新しいリビジョンを作成し、その結果、元のリモートリポジトリからローカルリポジトリを段階的に更新することができなくなります。

syncできれば、フェーズ中に、たとえばフックを使用してこれを実行したいと思います。ここで紹介する「解決策」は、解決策というよりも松葉杖のようなものです。つまり、同期後に履歴を毎回書き直さなければならず、事実上、変更されたコピーと「元の」コピーの2つの別々のコピーを保持する必要があります。マイナーなsvnsync修正)。

注意:私は作業コピーではなく、リポジトリに取り組んでいます。また、これはrevpropでsvn:externalsないことに注意してください。

4

0 に答える 0