web-dev-qa-db-ja.com

一般的で便利なSVNのプリコミットフックを共有する

SVNの一般的な、または便利な事前コミットフックは何ですか?

40
powtac

Twitterアカウントにメッセージをポストするポストコミットフックがあります。 twitsvn を使用します(免責事項:私はそのプロジェクトのコミッターです)。

愚かな?多分...しかし、それは私たちがバージョン管理に挑戦しているチームメンバーの一部にリポジトリの状況を伝えるための良い方法であることが判明しました。 SVNが彼らのTwitterクライアントを介して彼らと話し始めたら、それはブラックボックスのようには感じられませんでした。

8

ユーザーが実際にコミットメッセージにコメントを入力したこと、および追跡する特定の問題番号が含まれていること。

45
Jon

さまざまなテキストファイル(VRML、XMLなど)の絶対パスを確認します。チェックインされたコードのほとんどは絶対パスを持つべきではありませんが、一部の人々やツールはハードコードされたものを作成することを要求します。

20
Macke

私は送信メッセージをWordカウントにします。 5ワード以上である必要があります。これは私に対するいくつかのコメディ侮辱につながりました...

13
Ben S
  • タブを確認し、チェックインを拒否します。
  • 一貫性のない行末をチェックし、チェックインを拒否します。
  • 「CR:[ユーザー名]」の発生を確認し、コードレビューがない場合はチェックインを拒否します。
13
i_am_jorf

あなたが見てみたいかもしれません: 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/

11
Christian K.

私はsvnフックを使用して以下を行います。

  • より厳密なコードスタイルのポイントを適用する
  • 明白な構文エラーをチェックします
  • 「Fixes」や「Addresses」のような特別なTracキーワードが実際に適切な問題番号の前にあることを確認してください
8
John Feminella

私はファイルタイプをチェックして、特定の禁止されたタイプが誤ってコミットされていないことを確認します(例:.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
7
gbjbaanb

アーカイブの優れたコミットフックは、すべての.VCPROJ(または.CSPROJ)Visual Studioプロジェクトをチェックして、出力ディレクトリがローカル(通常はデバッグに使用される)に変更されていないことを確認することです。

これらの問題は正しくコンパイルされますが、実行可能ファイルが見つからないため、ビルドは中断されます。

6
greggorob64

私が現在取り組んでいる会社では、これはチェックされています:

  • バイナリファイルに必要なロック属性が設定されている場合。
  • Javaファイルに標準の著作権表示があり、現在の年が含まれている場合。
  • コードが適切にフォーマットされている場合(コードのフォーマットにはJalopyを使用)-これはばかげているように聞こえるかもしれませんが、実際には異なるバージョン間のテキスト比較が容易になります。
  • コードにコミットメッセージがある場合。
  • ディレクトリ構造が定義されたものに準拠している場合(すべてのプロジェクトは定義されたSVNフォルダーの下にある必要があり、各プロジェクトにはタグ、ブランチおよびトランクフォルダーが必要です)。

それだけだと思います。

コミットがチケットに関連付けられているかどうかを確認するアイデアが気に入っています。それは実際に私には多くの意味があります。

6
Ravi Wallau

特定の言語でlintのようなツールを実行して、コードの一般的な問題を見つけたり、コーディングスタイルを強制したりする人もいます。ただし、小規模で熟練したチームでは、継続的な統合やコードのレビュー中にすべてのコミットを実行し、起こりうる問題に対処できるようにしたいと考えています。このおかげでコミットが速くなり、コミットの頻度が増え、統合が容易になります。

5
Adam Byrtek

check-mime-type.pl pre-commit hook を使用して、コミットされたファイルにMIMEタイプと行末オプションが設定されていることを確認します。 Subversionを使用して、DAVを使用するWebサイトに表示されるファイルを公開します。MIMEタイプが設定されていないすべてのファイルは、テキストファイルとして提供されます(たとえば、HTMLソースは、レンダリングされたマークアップの代わりにブラウザーに表示されます)。

3

RegExを介して「問題#」などを含むコミットメッセージに基づく変更リストの詳細をメモにMantisバグトラッカーに挿入します。

2
Adam

コミット前とコミット後のフックコンボを使用して、svn commitからの関連エントリでbugzillaを自動的に更新します。

2つ目の(プリコミット)フックを使用して、適切なsvn:eol-styleプロパティとsvn:keywordsプロパティがレポジトリに追加される前にファイルに設定されていることを確認します。

3番目(コミット後)のフックがあり、ビルドを開始し、ビルドが壊れている場合は結果をメールで送信し、ビルドが再度修正されたときに全員に通知します。

オフサイトレプリケーションが可能な限り最新であることを確認するために、svnレプリケーションを開始する4番目(コミット後)のフックがあります。

残念ながら、これらにソースを投稿することはできませんが、Bugzilla統合を除いて、実装は簡単で、継続的な統合には Hudson がおそらくより良い選択です。

Bugzillaの統合については、 scmbug を参照することをお勧めします。

2
Paul Wagland

コミットメッセージがあり、「バグ修正」よりも!=であること。くそー、私はそれらの役に立たないメッセージを嫌いでしたか!

2
Victor Jalencas

次のフックスクリプトを使用して、ソースコードの行末とシェルスクリプトの権限が正しいことを確認します(誰かが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
2
wdk

プロジェクトをコンパイルするためのフックはどうですか?例えばmake allを実行します。これは、コンパイルしないコードをチェックインしないことを保証します! :)

1
tchen

コミットメッセージの[レビュアー:xyz]のメモをチェックし、コミットを拒否するフックを楽しんでいます。

0

みんなが正しいものを使用していることを確認するためだけに、aspx/htmlファイルのdoctypeをチェックするものを書くことを考えています。

また、プリ(またはポスト)コミットフックを使用して、CIサーバーに通知をプッシュする Hudsonブログで説明されているように

0
Allen Rice

PostUpdateとPreCommitを使用してSVN 1.5のファイル外部の欠如を解決する

0
Azlam

ケースの衝突(愚かなウィンドウ)をチェックし、クライアントが少なくとも1.5であることを確認するためにrequire-mergeinfo.plも確認します。これにより、svn:mergeinfoが常に設定されます。

0
thekbb