40

SVNの一般的および/または有用なpre-commitフックは何ですか?

4

22 に答える 22

45

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

于 2009-05-19T19:33:24.947 に答える
20

さまざまなテキストファイル(VRML、XMLなど)の絶対パスをチェックします。チェックインされたコードのほとんどに絶対パスを含めることはできませんが、ハードコードされたものを作成することを主張する人やツールもあります。

于 2009-05-19T19:52:18.043 に答える
13

私は送信メッセージで単語数を数えます。5語以上である必要があります。これは私に対するいくつかのコメディ侮辱につながりました...

于 2009-05-19T19:34:19.110 に答える
13
  • タブを確認し、チェックインを拒否します。
  • 行末に一貫性がないことを確認し、チェックインを拒否します。
  • 「CR:[username]」の発生を確認し、コードレビューがない場合はチェックインを拒否します。
于 2009-05-19T19:34:21.030 に答える
11

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/

于 2010-08-05T10:40:55.563 に答える
8

私はsvnフックを使って次のことをするのが好きです:

  • コードスタイルのより厳密なポイントを適用する
  • 明らかな構文エラーをチェックします
  • 「Fixes」や「Addresses」などの特別なTracキーワードが、実際に適切な問題番号の前にあることを確認してください
于 2009-05-19T19:35:16.080 に答える
8

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

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

于 2009-11-24T21:35:40.963 に答える
7

ファイルタイプをチェックし、特定の禁止されたタイプが誤ってコミットされていないことを確認します(.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
于 2009-05-20T12:58:21.743 に答える
6

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

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

それだけだと思います。

コミットがチケットに関連付けられているかどうかを確認するというアイデアが好きです。それは実際に私にとって非常に理にかなっています。

于 2009-11-22T07:46:54.643 に答える
6

コミット後のフックを使用して、作成者のプロパティをLDAPツリーからわかりやすい名前に書き換えます。(認証は従業員IDで行われます)

于 2009-08-27T14:43:53.517 に答える
6

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

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

于 2009-08-27T14:49:44.880 に答える
5

コード内の一般的な問題を見つけたり、コーディングスタイルを強制したりするために、特定の言語に対してlintのようなツールを実行することを好む人もいます。ただし、小規模で熟練したチームでは、継続的インテグレーションやコードレビュー中に、すべてのコミットを実行して、発生する可能性のある問題に対処できるようにすることを好みます。このおかげで、コミットが高速になり、より頻繁なコミットが促進され、統合が容易になります。

于 2009-11-20T23:49:11.977 に答える
3

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

于 2009-11-22T22:23:33.390 に答える
2

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

2番目の(pre-commit)フックを使用して、ファイルが再投稿に追加される前に、適切なsvn:eol-styleおよびsvn:keywordsプロパティがファイルに設定されていることを確認します。

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

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

残念ながら、これらにソースを投稿することはできませんが、Bugzilla統合を除いて、実装は簡単であり、継続的インテグレーションにはHudsonの方がおそらく適しています。

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

于 2009-11-24T20:17:20.717 に答える
2

RegExを介して「issue#」などのコミットメッセージに基づいたチェンジリストの詳細を含むメモをMantisバグトラッカーに挿入します。

于 2009-05-19T20:07:14.503 に答える
2

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

于 2009-11-22T22:06:04.870 に答える
2

次のフックスクリプトを使用して、ソースコードの行末とシェルスクリプトのアクセス許可が正しいことを確認します(すべてが正常であると思われるときに誰かが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
于 2011-04-20T14:49:18.697 に答える
1

プロジェクトをコンパイルするためのフックはどうですか?例:makeallを実行します。これにより、コンパイルされないコードを誰もチェックインしなくなります。:)

于 2009-11-20T09:16:56.963 に答える
0

PostUpdateとPreCommitを使用してSVN1.5のファイル外部の不足を解決する

于 2009-11-21T19:39:16.570 に答える
0

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

于 2010-06-22T18:11:52.660 に答える
0

全員が正しいものを使用していることを確認するために、aspx/htmlファイルのdoctypeをチェックするために1つ作成することを考えています。

また、 Hudsonブログで説明されているように、事前(または事後)コミットフックで通知をCIサーバーにプッシュすることができます。

于 2010-07-16T14:26:17.457 に答える
0

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

于 2010-11-20T03:49:00.790 に答える