こんにちは私は、バイナリでテキストではない任意のファイルにSVNサーバーが自動的にsvn:needs-lockプロパティを割り当てる方法があるのだろうかと思っていました。自動的にsvn:needs-lockを追加します
我々はかなり小さい開発チームを持っていますが、それはそのようなことを忘れることは非常に簡単ですので、意味がありません。新しく作成されたバイナリファイルにこのプロパティを設定することを忘れないように皆に載っ。
こんにちは私は、バイナリでテキストではない任意のファイルにSVNサーバーが自動的にsvn:needs-lockプロパティを割り当てる方法があるのだろうかと思っていました。自動的にsvn:needs-lockを追加します
我々はかなり小さい開発チームを持っていますが、それはそのようなことを忘れることは非常に簡単ですので、意味がありません。新しく作成されたバイナリファイルにこのプロパティを設定することを忘れないように皆に載っ。
編集のsvn設定ファイルと自動小道具のためのエントリを追加したり、SVN 1.8以降のクライアントとのsvn:auto-props
バージョン管理プロパティを使用します。 Read SVNBook!
EDIT:
SVN 1.8から、あなたはあなたのリポジトリのルートパスにsvn:auto-props
プロパティを適用することができます。このrelease noteと更新されたSVNBook 1.8 chapterを参照してください。
auto propsメソッドは、使用されている各SVNクライアントで設定する必要があることに注意してください。したがって、新しい開発者や既存の開発者を新しいマシンにセットアップするときは、この設定を忘れないようにしてください。
すべてTortoiseSVNを使用している場合は、各チェックアウトのベースフォルダにtsvn:autopropsプロパティを設定することができます。これはすべてのTortoiseSVNクライアントに適用されます。
あなたが本当にそれを爪にしたい場合は、各リポジトリにpre-commitフックを配置する必要があります。これに対して、enforcerスクリプトを簡単にツールとして使用できます。
もしあなたがpython-fuを持っていれば、RepoGuard(後継者はSVNChecker)も役に立つかもしれません。
あなたが選ぶどんなには、遡及リポジトリ内の既存のファイルにプロパティを適用する方法はありません、私は思います。しかし、おそらくファイルの次のコミット時にそれを強制することができます。
これは優れた点です。このようなサーバー側の執行に慣れている場合(TFSなど)は、すぐにはわかりません。 +1 – MutantNinjaCodeMonkey
旧式です。 SVN 1.8の「リポジトリディクテーションされた構成」機能を参照してください。http://subversion.apache.org/docs/release-notes/1.8.html#repos-dictated-config – bahrep
ページが自動的ニーズロックとそれがどのように設定されている保証を追加する方法についてのすべてのさまざまなオプションを説明し、このSubversionのウィキにあります。ページものサンプルスクリプトおよび構成の詳細与える:
http://www.orcaware.com/svn/wiki/Automatic_lock-modify-unlock
サーバーに自動的にニーズを適用させる方法はありません。ロック。このドキュメントでは、各SVNクライアントを個別に設定して自動的にニーズロックを適用する方法と、ニーズロックを正しく使用しないコミットを拒否するようにSVNサーバーを設定する方法について説明します。 –
@DanFabulich今、SVN 1.8クライアントにリポジトリから自動小道具を適用するよう指示する方法があります。 – bahrep
のApache Subversionの1.8は、SVN 1.8クライアントが必要ですが、これは、クライアント側の機能であるため、1.8サーバーは必要ありませんRepository Dictated Configuration機能を導入しました。 Subversionの1.8で
、新しいSubversionのsvn:auto-props
inherited propertyを使用して、リポジトリ内の自動小道具パターンを設定することができます。
たとえば、リポジトリのルート(またはプロジェクトのルートを表すリポジトリパス)の値を*.exe = svn:needs-lock=*
プロパティに設定します。これにより、それぞれに追加され、それぞれ * .exeファイルにsvn:needs-lock=*
プロパティが適用されます。
次の標準のsvnを追加できるようにするには、Subversionのプロパティで複数行の値を格納することができますsvn:auto-props
へとMIMEパターンロックを必要とします:
*.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=*
*がワイルドカードの場合、needs-lockをすべてのファイルタイプに単純に適用する場合は、* = svn:needs-lock = *が機能しますか? –
@JonathonCowley私は今TortoiseSVN 1.8.7(SVN 1.8.9)で 'svn:auto-props'を' * = svn:needs-lock = * 'に設定してテストしました。プロパティを設定したフォルダの下にあるすべてのファイルにneeds-lockを適用します。 – bahrep
非常に速い応答に感謝します。私は自分でそれをテストしたが、私はSubversionにアクセスできないPC上にいる。 –
事前にコミットフック
#!/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
ニース! 'svn propset'コマンドを必要なファイルとともに表示するために' pre-commit'フックを修正しました:https://gist.github.com/spl/0affe6cc0e06aae6cb46a45b8a9edd36 –
気をつけろ! SVNクライアントごとにauto propsを個別に設定する必要があります。少なくともsvn 1.7では、サーバーが自動的にニーズロックを適用する方法はありません。 –
TSVNには、これに使用されるtsvn:auto-propsプロパティがあります。http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html#tsvn-dug-propertypage-tsvn-props – Stefan
@Danこのプロパティを持たないバイナリファイルを拒否するプリコミットスクリプトを作成することができます。 – greggo