SVNの一般的な、または便利な事前コミットフックは何ですか?
Twitterアカウントにメッセージをポストするポストコミットフックがあります。 twitsvn を使用します(免責事項:私はそのプロジェクトのコミッターです)。
愚かな?多分...しかし、それは私たちがバージョン管理に挑戦しているチームメンバーの一部にリポジトリの状況を伝えるための良い方法であることが判明しました。 SVNが彼らのTwitterクライアントを介して彼らと話し始めたら、それはブラックボックスのようには感じられませんでした。
ユーザーが実際にコミットメッセージにコメントを入力したこと、および追跡する特定の問題番号が含まれていること。
さまざまなテキストファイル(VRML、XMLなど)の絶対パスを確認します。チェックインされたコードのほとんどは絶対パスを持つべきではありませんが、一部の人々やツールはハードコードされたものを作成することを要求します。
私は送信メッセージをWordカウントにします。 5ワード以上である必要があります。これは私に対するいくつかのコメディ侮辱につながりました...
あなたが見てみたいかもしれません: http://svn.Apache.org/repos/asf/Subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts (このページは明らかに時代遅れであり、Subversion 1.7ではもうメンテナンスされていません。
または直接: https://svn.Apache.org/repos/asf/Subversion/trunk/contrib/
私はsvn
フックを使用して以下を行います。
私はファイルタイプをチェックして、特定の禁止されたタイプが誤ってコミットされていないことを確認します(例:.obj、.pdb)。まあ、誰かがコンパイラによって生成された一時ファイルの2ギグを初めてチェックインしたときからではありません:(
windowsの場合:
@echo off
svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED
echo Please enter a check-in comment 1>&2
exit 1
:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt
findstr /G:"%1\hooks\ignore-matches.txt" c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0
echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1
アーカイブの優れたコミットフックは、すべての.VCPROJ(または.CSPROJ)Visual Studioプロジェクトをチェックして、出力ディレクトリがローカル(通常はデバッグに使用される)に変更されていないことを確認することです。
これらの問題は正しくコンパイルされますが、実行可能ファイルが見つからないため、ビルドは中断されます。
私が現在取り組んでいる会社では、これはチェックされています:
それだけだと思います。
コミットがチケットに関連付けられているかどうかを確認するアイデアが気に入っています。それは実際に私には多くの意味があります。
特定の言語でlintのようなツールを実行して、コードの一般的な問題を見つけたり、コーディングスタイルを強制したりする人もいます。ただし、小規模で熟練したチームでは、継続的な統合やコードのレビュー中にすべてのコミットを実行し、起こりうる問題に対処できるようにしたいと考えています。このおかげでコミットが速くなり、コミットの頻度が増え、統合が容易になります。
check-mime-type.pl pre-commit hook を使用して、コミットされたファイルにMIMEタイプと行末オプションが設定されていることを確認します。 Subversionを使用して、DAVを使用するWebサイトに表示されるファイルを公開します。MIMEタイプが設定されていないすべてのファイルは、テキストファイルとして提供されます(たとえば、HTMLソースは、レンダリングされたマークアップの代わりにブラウザーに表示されます)。
RegExを介して「問題#」などを含むコミットメッセージに基づく変更リストの詳細をメモにMantisバグトラッカーに挿入します。
コミット前とコミット後のフックコンボを使用して、svn commitからの関連エントリでbugzillaを自動的に更新します。
2つ目の(プリコミット)フックを使用して、適切なsvn:eol-styleプロパティとsvn:keywordsプロパティがレポジトリに追加される前にファイルに設定されていることを確認します。
3番目(コミット後)のフックがあり、ビルドを開始し、ビルドが壊れている場合は結果をメールで送信し、ビルドが再度修正されたときに全員に通知します。
オフサイトレプリケーションが可能な限り最新であることを確認するために、svnレプリケーションを開始する4番目(コミット後)のフックがあります。
残念ながら、これらにソースを投稿することはできませんが、Bugzilla統合を除いて、実装は簡単で、継続的な統合には Hudson がおそらくより良い選択です。
Bugzillaの統合については、 scmbug を参照することをお勧めします。
コミットメッセージがあり、「バグ修正」よりも!=であること。くそー、私はそれらの役に立たないメッセージを嫌いでしたか!
次のフックスクリプトを使用して、ソースコードの行末とシェルスクリプトの権限が正しいことを確認します(誰かがWindowsにチェックインすると、すべてが問題なく、UNIXビルドが壊れるのでイライラします)。
#!/bin/bash
REPOS="$1"
TXN="$2"
# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
then
if [ ${#BASH_REMATCH[*]} -ge 2 ]
then
FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};
# Make sure Shell scripts are executable
if [[ sh == ${BASH_REMATCH[2]} ]]
then
EX_VALUE="true"
if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
then
ERROR=1;
echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
fi
EOL_STYLE="LF"
else
EOL_STYLE="native"
fi
# Make sure every file has the right svn:eol-style property set
if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
then
ERROR=1;
echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
fi
fi
fi
test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done
プロジェクトをコンパイルするためのフックはどうですか?例えばmake allを実行します。これは、コンパイルしないコードをチェックインしないことを保証します! :)
コミットメッセージの[レビュアー:xyz]のメモをチェックし、コミットを拒否するフックを楽しんでいます。
みんなが正しいものを使用していることを確認するためだけに、aspx/htmlファイルのdoctypeをチェックするものを書くことを考えています。
また、プリ(またはポスト)コミットフックを使用して、CIサーバーに通知をプッシュする (Hudsonブログで説明されているように
PostUpdateとPreCommitを使用してSVN 1.5のファイル外部の欠如を解決する
ケースの衝突(愚かなウィンドウ)をチェックし、クライアントが少なくとも1.5であることを確認するためにrequire-mergeinfo.plも確認します。これにより、svn:mergeinfoが常に設定されます。