0

ローカル ファイルへのパスを含むコミットを禁止する目的で、git pre-commit フックを作成しました。多くの場合、git ユーザーは、コミットしてプッシュする前に、ローカル パスをサーバーに関連するパスに置き換えるのを忘れます。これが発生するたびに、多くの時間が無駄になります。

正規表現は、指定したファイルを使用して CLI で ack が呼び出されると正常に動作しますが、フック スクリプト内から呼び出されるとテキストの一致を拒否します。おそらくエコーが原因であるか、問題は改行/改行に関連していると思います。

私のスクリプト:

if git-rev-parse --verify HEAD >/dev/null 2>&1

then

export rev="`git-diff --cached`"

echo "'$rev'"

export i="`echo "$rev" | ack '\+ *(?!#)[a-z$=" ]*/home/'`"

echo

echo "'$i'"

if [ ! -z "$i" ]

then
    echo "Error: Attempt to commit file with uncommented path to local files"
    echo
    echo "This usually means that you are trying to commit code that has been"
    echo "localised to your own machine, and that the paths will fail when"
    echo "the code is run on the server."
    echo
    echo "Please check if you really meant to commit this code. Commenting out"
    echo "the code in question will prevent this message from appearing."
    echo
    echo "Details: $i"
    exit 1
fi


fi

これにより、次のように git diff に表示されるように、新しいパスが追加されたコミットが防止されるはずです。

+       $foo = "/home/user/file.txt

ただし、次のようにコメントアウトされたパスを受け入れる必要があります。

+       #$foo = "/home/user/file.txt

スクリプトがコメント解除されたローカル パスを正しく検出しないのはなぜですか?

4

0 に答える 0