9

私が今まで持っているのは

#!/bin/sh

php_syntax_check()
{
    retval=0
    for i in $(git-diff-index --name-only --cached HEAD -- | grep -e '\.php$'); do
        if [ -f $i ]; then
            output=$(php -l $i)
            retval=$?
            if [ $retval -gt 0 ]; then
                echo "=============================================================================="
                echo "Unstaging $i for the commit due to the follow parse errors"
                echo "$output"
                git reset -q HEAD $i
            fi
        fi
    done

    if [ $retval -gt 0 ]; then
        exit $retval
    fi
}
php_syntax_check
4

4 に答える 4

2

トピックから外れていたら申し訳ありませんが、コミットを行う前に何らかの自動テスト (コードに構文エラーがないことを意味する) を実行することになっているのではないでしょうか?

于 2008-10-06T11:03:52.730 に答える
2

コミットが部分的なコミットである場合 (作業ツリー内のすべての変更がコミットされるわけではありません)、この make はステージングされたコピーではなく作業コピーをテストするため、誤った結果を返します。

これを行う1つの方法は次のとおりです。

git diff --cached --name-only --diff-filter=ACMR | xargs git checkout-index --prefix=$TMPDIR/ --
find $TMPDIR -name '*.php' -print | xargs -n 1 php -l

ステージングされたイメージのコピーをスクラッチ スペースに作成し、そこでテスト コマンドを実行します。いずれかのファイルにビルド内の他のファイルが含まれている場合は、ステージングされたイメージ全体をテスト ツリーで再作成し、そこで変更されたファイルをテストする必要がある場合があります (参照: Git pre-commit hook : changed/added files )。

于 2010-06-18T11:23:56.073 に答える
0

php5-cli がインストールされている場合は、事前コミットを PHP で記述し、使い慣れた構文を使用できます。

もっと似たようなことをしてください。

#!/usr/bin/php
<?php /* Your pre-commit check. */ ?>
于 2009-02-13T20:13:16.947 に答える