5

ライブラリの特定のリビジョンにsvn:externalsを使用します。

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

作業コピーにそのようなチェックアウトされた外部への変更を加えると、外部がHEADではなく特定のリビジョンにリンクしていてもコミットすることができます。

コミット後に実行svn updateすると、subversionがすべてをリビジョン12345に戻す​​ため、変更は作業コピーに含まれなくなります。したがって、実際に変更を確認することはできませんが、HEADに残っているため、問題があります。

外部がHEADリビジョンを指していない場合にのみコミットを禁止することは可能ですか?

4

4 に答える 4

3

これらの種類の検証には、pre-commitフックもお勧めしますが、簡単に理解できないことが判明する可能性のあるスクリプトを作成する代わりに、SVNKitのようなライブラリを使用することをお勧めします-http ://svnkit.com/( Javaを知っている)。

このライブラリを使用して、自分でいくつかのpre-commitフックを作成しましたが、操作は非常に簡単です。Subversionによってpre-commitフックから呼び出される実行可能な小さなJavaプログラムを作成します。次に、たとえばURLのプロパティや一部を抽出して検証を行い、「ルール」に適用されない場合はコミットを拒否するのは簡単です。

SVNLookClientクラスとSVNChangeEntryクラスを見てください。これらには、最も一般的なケースのメソッドがあります(たとえば、進行中のコミットに関する情報を抽出します)。

于 2010-01-05T16:02:33.157 に答える
2

次のようなことを試すことができます。pre-commitスクリプトを使用して、コミットがタグに送信されるかどうかを確認します。もしそうなら、失敗してメッセージを提供します。Subversionフックについてもう少し読んでください。がタグの場合に失敗するのではなく、HEADでない場合に失敗するように、正規表現を書き直す必要があります。

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/$” | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+”
if [ $? -eq 0 ] ; then
echo >&2 “***************************************”
echo >&2 “* Modification of tags is not allowed *”
echo >&2 “***************************************”
exit 1
fi
于 2010-01-04T21:08:52.070 に答える
1

httpsを使用しているので、を使用していると思いますmod_dav_svn。ライブラリリポジトリへの追加のURLを設定し、そのURLへの読み取り専用アクセスのみを許可することができます。そうすれば、通常はライブラリにコミットできる開発者でさえ、svn:externalを介してコミットすることはできません。

于 2009-06-16T13:25:41.780 に答える
1

外部をトランクのリビジョンとして定義し続けることにコミットしていない場合は、そのリビジョンに基づいて新しいタグを作成してみませんか。次に、svn:external がタグを指すようにし、文書化されたアクセス制御方法の 1 つを使用して、タグ ディレクトリへのコミットを制限します (または、タグを別のリポジトリに配置し、そのリポジトリを読み取り専用にします)。

于 2010-01-05T05:17:22.017 に答える