質問
こんにちは、SVN サーバーがバイナリでテキストではないファイルに svn:needs-lock プロパティを自動的に割り当てる方法があるかどうか疑問に思っていました。
私たちの開発者チームはかなり小規模ですが、新しく作成されたバイナリ ファイルにこのプロパティを設定することを全員に忘れないようにすることは意味がありません。そのようなことは非常に忘れられやすいためです。
解決
編集のsvn configファイルエントリを追加するオート小道具の使用 svn:auto-props
収録物件SVN1.8以上のおります。 読みSVNBook!
編集:
からSVN1.8に簡単に適用することができ svn:auto-props
プロパティにrootのパスポート。この リリースノート 更新 SVNBook1.8章.
他のヒント
Apache Subversion1.8紹介 リポジトリ,構成 機能を必要とする SVN1.8ト, が、1.8サーバーが不要となっているのでクライアント側の特徴です。
Subversion1.8を設定することができオート小道具のパターン内のリポジトリ用の新しいSubversion svn:auto-props
継承されるプロパティ.
例えば、設定 svn:auto-props
価値を *.exe = svn:needs-lock=*
いの物件でルートのリポジトリ(またはリポジトリのパスを表すルートのプロジェクト)。この結果に 各新たに追加 *.exeファイルを svn:needs-lock=*
財適用されます。
できる店舗のマルチライン値Subversion、物件の追加が可能なので、以下のように標準のsvn:ニーズ-ロックMIMEパターン svn:auto-props
:
*.bmp = svn:mime-type=image/bmp;svn:needs-lock=*
*.gif = svn:mime-type=image/gif;svn:needs-lock=*
*.ico = svn:mime-type=image/x-icon;svn:needs-lock=*
*.jpeg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.jpg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.png = svn:mime-type=image/png;svn:needs-lock=*
*.tif = svn:mime-type=image/tiff;svn:needs-lock=*
*.tiff = svn:mime-type=image/tiff;svn:needs-lock=*
*.doc = svn:mime-type=application/x-msword;svn:needs-lock=*
*.docx = svn:mime-type=application/x-msword;svn:needs-lock=*
*.jar = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.odc = svn:mime-type=application/vnd.oasis.opendocument.chart;svn:needs-lock=*
*.odf = svn:mime-type=application/vnd.oasis.opendocument.formula;svn:needs-lock=*
*.odg = svn:mime-type=application/vnd.oasis.opendocument.graphics;svn:needs-lock=*
*.odi = svn:mime-type=application/vnd.oasis.opendocument.image;svn:needs-lock=*
*.odp = svn:mime-type=application/vnd.oasis.opendocument.presentation;svn:needs-lock=*
*.ods = svn:mime-type=application/vnd.oasis.opendocument.spreadsheet;svn:needs-lock=*
*.odt = svn:mime-type=application/vnd.oasis.opendocument.text;svn:needs-lock=*
*.pdf = svn:mime-type=application/pdf;svn:needs-lock=*
*.ppt = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock=*
*.ser = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.swf = svn:mime-type=application/x-shockwave-flash;svn:needs-lock=*
*.vsd = svn:mime-type=application/x-visio;svn:needs-lock=*
*.xls = svn:mime-type=application/vnd.ms-excel;svn:needs-lock=*
*.zip = svn:mime-type=application/zip;svn:needs-lock=*
auto props メソッドは、使用されている各 SVN クライアントで設定する必要があることに注意してください。したがって、新しい開発者または既存の開発者を新しいマシンにセットアップする場合は、この構成を忘れずに実行する必要があります。
皆さんが使っているなら TortoiseSVN, を設定できます。 tsvn:自動プロパティ 各チェックアウトのベース フォルダーのプロパティは、すべての TortoiseSVN クライアントによって受け入れられます。
本当に成功させたい場合は、 事前コミット 各リポジトリにフックします。の 執行者 スクリプトを使用すると、これを簡単に行うことができます。
Python-fu をお持ちの場合は、 リポガード (の後継者 SVNチェッカー)も使えそうです。
どちらを選択しても、リポジトリ内の既存のファイルにプロパティを遡って適用する方法はないと思います。ただし、おそらくファイルの次のコミット時に強制することができます。
ページが自動的ニーズロックとそれがどのように設定されている保証を追加する方法についてのすべてのさまざまなオプションを説明し、このSubversionのウィキにあります。このページには、サンプルスクリプトおよび構成の詳細を与えます:
http://www.orcaware.com/svn/wiki/Automatic_lock -modifyアンロックする
前のコミットフックを使用してください。
#!/bin/bash
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv
SVNLOOKOK=1
# Check files for svn:needs-lock property
# Exit on all errors.
set -e
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
if [[ $REPOS_PATH =~ (A|M|U)[[:blank:]]{3}(.*)\.(.*) ]]
then
if [ ${#BASH_REMATCH[*]} -ge 2 ]
then
FILENAME=${BASH_REMATCH[2]}.${BASH_REMATCH[3]};
# Make sure every file has the svn:needs-lock property set
if [ "" == "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:needs-lock \"$FILENAME\" 2> /dev/null`" ]
then
ERROR=1;
echo "" >&2
echo "svn:needs-lock property has to be set on \"$FILENAME\"" >&2
echo "" >&2
fi
fi
fi
test -z $ERROR || (exit 1)
done
# All checks passed, so allow the commit.
exit 0
とプリロックフック
#!/bin/bash
REPOS="$1"
PATH="$2"
USER="$3"
# If a lock exists and is owned by a different person, don't allow it
# to be stolen (e.g., with 'svn lock --force ...').
# (Maybe this script could send email to the lock owner?)
SVNLOOK=/usr/bin/svnlook
GREP=/bin/grep
SED=/bin/sed
LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
$GREP '^Owner: ' | $SED 's/Owner: //'`
# If we get no result from svnlook, there's no lock, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "" ]; then
exit 0
fi
# If the person locking matches the lock's owner, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "$USER" ]; then
exit 0
fi