新しいファイルのコミット時に、svnプロパティ(svn:keyword = Id Date Rev Authorなど)をファイルに追加したいと思います。
これが機能するためには、2つの主なオプションがあります。
- クライアント側:svnクライアント構成のautopropsを変更する
- サーバー側:コミットフックで魔法をかける
クライアントの設定を制御する必要があるため、クライアント側が常に望ましいとは限りません。サーバー上でこれを解決したいと思います。これはどのように行うことができますか。
新しいファイルのコミット時に、svnプロパティ(svn:keyword = Id Date Rev Authorなど)をファイルに追加したいと思います。
これが機能するためには、2つの主なオプションがあります。
クライアントの設定を制御する必要があるため、クライアント側が常に望ましいとは限りません。サーバー上でこれを解決したいと思います。これはどのように行うことができますか。
Subversionのドキュメントによると、サーバー側でコミットを変更するのは悪い考えです。
代わりに、 cronを介して定期的に(またはコミットによってトリガーされたサーバー上で)svn_apply_autopropsスクリプトのカスタマイズされたバージョンのようなことを行うことができます。svn_apply_autopropsスクリプトは、必要なものよりも少し一般的ですが、適切な構成ファイルを設定するのは簡単です。
この投稿の時点で、subversion Webサイトはapache.orgの下に移行されており、contribツールのドキュメントが見つかりませんでした。
バージョン1.8以降、機能リポジトリで指定された構成を使用して、サーバー側でプロパティを自動的に設定できます。
自動プロパティ設定から:
[...]特定のサーバーからチェックアウトされた作業コピーを操作するときに、接続しているすべてのクライアントが自動的に考慮する一連のプロパティ定義。Subversion 1.8以降のクライアントは、
svn:auto-props
継承可能なプロパティを通じてこのような機能をサポートしています。
必要なのは、十分に新しいクライアントだけであることに注意してください。以下に、svnコマンドラインクライアント1.8.8を使用した完全な例を示します。svnサーバー1.6.11で。
svnクライアントバージョン1.8以降が必要
jani@dev:/tmp/testrepo/text-files$ svn --version --quiet
1.8.8
auto-propsプロパティ設定の前に作成されたファイル
jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
jani@dev:/tmp/testrepo/text-files$
自動小道具を設定する
jani@dev:/tmp/testrepo/text-files$ svn propset svn:auto-props "*.txt = svn:eol-style=LF" .
property 'svn:auto-props' set on '.'
jani@dev:/tmp/testrepo/text-files$ svn proplist -v --recursive
Properties on '.':
svn:auto-props
*.txt = svn:eol-style=LF
jani@dev:/tmp/testrepo/text-files$
CRLFラインターミネータを使用して新しいファイルf4.txtを作成します
jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
f4.txt: UTF-8 Unicode text, with CRLF line terminators
jani@dev:/tmp/testrepo/text-files$
f4.txtのラインターミネータはコミット後に変更されます
jani@dev:/tmp/testrepo/text-files$ svn add f4.txt
A f4.txt
jani@dev:/tmp/testrepo/text-files$ svn commit -m 'just another test' .
Adding f4.txt
Transmitting file data .
Committed revision 5.
jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
f4.txt: UTF-8 Unicode text
jani@dev:/tmp/testrepo/text-files$ svn proplist -v --recursive
Properties on '.':
svn:auto-props
*.txt = svn:eol-style=LF
Properties on 'text-files/f4.txt':
svn:eol-style
LF
jani@dev:/tmp/testrepo/text-files$
複数の人がコミットしているときはいつでも、おそらく一貫性のないsubversion構成があります。
あなたが言うように、クライアントレベルとサーバーレベルでこの問題を2回解決します。
サーバーのコミット中に小道具を自動的に変更しないでください。あなたがあなたの規則に例外があり、あなたがそれを乗り越えることができないとき、これはほぼ確実に後であなたを尻に噛みます。
次のように、構成ファイルを変更するための指示をすべての開発者に電子メールで送信します。
注意、チームメイト: 作業しているすべてのボックスで、ファイルを変更してください:〜/ .subversion / config * [その他]セクションで、次の行のコメントを解除します。 enable-auto-props = yes [auto-props]セクションで、次のように行を追加またはコメント解除します。 * .py = svn:eol-style = "LF"; svn:executable = "ON"; keyswords = "Id"; 注:サンドボックスディレクトリで次の手順を実行して、これが機能していることをテストできます。 delete.me.pyをタッチします svn add delete.me.py ls -al delete.me.py#次のように表示されます。 -rwxrwxr-x 1 krice4 krice404月19日12:05delete.me.py svn proplist delete.me.py#次のように表示されます。 'delme.py'のプロパティ: svn:executable キーワード svn:eol-style svn revert delete.me.py rm delete.me.py
3.電子メールを送信した後、それらのサスペンダーにベルトを追加する時が来ました。何人かの開発者は彼らがすることになっていることをするのを忘れるでしょう。したがって、小道具を正しく設定せずに誰かがコミットするたびに、迷惑な警告を作成します。
Pythonファイルの次の検出フックをお勧めします。上記のように、すべてが警告を出力する必要がありますが、サブバージョン操作を妨げることはありません。例外はあなたを殺します。例外は、次の件名でユーザーに電子メールを送信したり、開発グループ全体に電子メールを送信したりできることに注意してください。
「愚かなユーザーのケビンは、タブが入ったファイルをコミットしただけです!」
これらのコミットフックの1つを作成する方法については、http ://wordaligned.org/articles/a-subversion-pre-commit-hookを参照してください。