共通/便利な SVN コミット前フックを共有する [終了]
-
23-08-2019 - |
質問
SVN の一般的および/または便利なコミット前フックにはどのようなものがありますか?
解決
私たちは、ポストは、Twitterアカウントにメッセージをポストフックをコミットしています。使用 twitsvnする(免責事項:私はそのプロジェクトのコミッターです)。
愚かな?多分...しかし、それは、私たちは私たちのバージョン管理チャレンジチームのメンバーの一部に私たちのリポジトリの往来をオン通信するための良い方法であることが判明しました。 SVNは自分のTwitterクライアントを経由して彼らに話し始めたら、それはブラックボックスのようなあまり感じませんでした。
他のヒント
ユーザーが実際にコミットメッセージにコメントを入力したこと、そしてそれが追跡するために、特定の問題の数が含まれます。
様々なテキストファイルで絶対パス(すなわちVRML、XMLなど)の確認。チェックインされたコードのほとんどは、絶対パスを持っていることはありません、まだ一部の人やツールは、ハードコードされたものを生産することを主張ます。
私が提出したメッセージのワードカウントを行います。彼らは、5語以上にする必要があります。これは私に対して、いくつかの喜劇侮辱につながっている...
- タブを確認し、チェックインを拒否します。
- 一貫性のないラインエンディングを確認し、チェックインを拒否します。
- 「CR:」の発生を確認します。username] ""コードレビューがない場合は、チェックインを拒否します。
あなたはを見てみたいことがあります。 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
以下にフックします:
- コードスタイルのより厳密な点を強制する
- 明らかな構文エラーをチェックする
- 「Fixes」や「Addresses」などの特別な Trac キーワードが実際に適切な問題番号の前にあることを確認してください。
私は、ファイルタイプをチェックして、特定の禁止タイプが事故(例えば.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
私は、私たちのLDAPツリーからのフレンドリ名に作者のプロパティを書き換えるためにコミット後のフックを使用しています。 (認証が従業員IDである)
私たちはアーカイブ上で持っている素晴らしいcommitフックは、出力ディレクトリは、(一般的にデバッグに使用)ローカル何にも変わっていなかったことを確認するために、すべての.VCPROJ(または.CSPROJ)のVisual Studioプロジェクトをチェックすることです。
これらの問題は、適切にコンパイルが、まだ不足しているため、実行ファイルのビルドを中断します。
私が現在働いている会社では、これがチェックされています。
- バイナリ ファイルにロック属性が設定されている場合。
- Java ファイルに標準の著作権表示があり、それに現在の年が含まれているかどうか。
- コードが適切にフォーマットされている場合 (コードのフォーマットには Jalopy を使用します)、これはばかげているように聞こえるかもしれませんが、実際には、異なるバージョン間のテキストの比較が容易になります。
- コードにコミットメッセージがある場合。
- ディレクトリ構造が定義された内容に準拠している場合 (すべてのプロジェクトは定義された SVN フォルダーの下にあり、各プロジェクトにはタグ、ブランチ、トランク フォルダーがある必要があります)。
それだと思います。
私は、コミットがチケットに関連付けられているかどうかをチェックするというアイデアが気に入っています。実際、それは私にとって非常に意味のあることです。
いくつかは、コード内で一般的な問題を発見および/またはコーディングスタイルを強制する特定の言語用糸くずのようなツールを実行していることを好みます。しかし、小型かつ熟練したチームに私はすべてが通過し、継続的インテグレーションおよび/またはコードレビューの際に起こりうる問題に対処するためにコミットできるようにすることを好みます。このコミットのおかげで簡単に統合につながる、より速く、より頻繁なコミットを奨励されている。
私は check- MIMEタイプとラインオプションの終わりがコミットされたファイルに設定されていることを確認するmime-type.pl事前コミットフックする。私は、DAVを使用して、ウェブサイト上で表示されるようにファイルを公開するためにSubversionを使用して、MIMEタイプのないすべてのファイル(例えばHTMLソースが代わりにレンダリングされたマークアップのブラウザに表示されます)のテキストファイルを務めます設定します。
正規表現を経由して「問題#」などを持つコミットメッセージに基づいて、チェンジ詳細とカマキリのバグトラッカーにノートを挿入します。
それがコミットメッセージを持っており、それは!=「バグ修正」以上であること。くそー、私はそれらの無用のメッセージが嫌いでした!
コミット前とコミット後のフックの組み合わせを使用して、svn コミットからの関連エントリで bugzilla を自動的に更新します。
2 番目の (コミット前) フックを使用して、ファイルがリポジトリに追加される前に、適切な svn:eol-style プロパティと svn:keywords プロパティがファイルに設定されていることを確認します。
3 番目の (コミット後) フックは、ビルドを開始し、ビルドが壊れた場合には結果をメールで送信し、ビルドが再び修正されたときに全員に通知します。
オフサイトのレプリケーションが可能な限り最新であることを保証するために、svn レプリケーションを開始する 4 番目の (コミット後) フックがあります。
残念ながら、これらのソースを投稿することはできませんが、Bugzilla の統合を除けば、実装は十分簡単です。 ハドソン おそらく継続的インテグレーションにとってはより良い選択です。
Bugzilla の統合については、以下を参照することをお勧めします。 スクムバグ.
私は、シェルスクリプトのソースコードとアクセス権の行末は(すべてがOKらしいとUNIX用のビルドを壊したときに、誰かがWindows上でチェックしたときに、それはイライラさせられる)が正しいことを確認するために、次のフックスクリプトを使用します。
#!/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
どのようにプロジェクトをコンパイルするためのフックは?例えばすべてを作る実行します。これはコンパイルできないコードに誰もチェックを保証しません! :)
PostUpdateとプリコミットを使用してSVN 1.5のファイル外観の不足を解決する
私は[レビュアー:XYZ]にチェックフック楽しみたいコミットメッセージに注意をし、コミット拒否
。私はちょうど誰もが正しいものを使用していることを確認するために、ASPX / htmlファイル上のdoctypeのを確認するために1を書くことについて考えています。
また、あなたが事前に(またはポスト)を持つことができるフックがあなたのCIサーバー<のhref = "http://www.hudson-labs.org/content/subversion-repository-change-notificationに出通知をプッシュするコミット-push-VSプル」のrel = "nofollowをnoreferrer">のハドソンブログ上で説明したように、のの
私はケースの衝突(愚かな窓)をチェックし、また、クライアントが少なくとも1.5であることを保証するためにrequire-mergeinfo.pl - SVNその方法:mergeinfoは常に設定されます。