Skip to content

Instantly share code, notes, and snippets.

@ka2n

ka2n/howtouse.md Secret

Last active December 26, 2015 02:19
Show Gist options
  • Save ka2n/03680fe7f41f2b6571dd to your computer and use it in GitHub Desktop.
Save ka2n/03680fe7f41f2b6571dd to your computer and use it in GitHub Desktop.
コンフリクトしたファイルのコミットを阻止

設置方法

この内容(シェルスクリプト)をレポジトリの.git/hooksフォルダの中にpre-commitという名前で保存する。 pre-commitに実行権限を追加する。 例: chmod +x ./pre-commit

説明

なにこれ

pre-commit hook pre-commitはコミットをする直前に実行される、シェルスクリプトです。 終了コードを0以外にするとコミットを阻止できます.

  • コンフリクトしたままのファイル
  • 文法が間違っているphpファイル

が無いかコミット前にチェックし、該当する場合はコミットを阻止します.

どうなるのか 幸せになれます

えっ

このプロジェクトPHPのシンタックスチェックいらないんだけど…
そういう時は冒頭でcheckPHP=0に変更しましょう

#!/bin/bash
checkPHP=1
checkCoffee=1
checkSass=1
PHP=`which php`
COFFEE=`which coffee`
SASS=`which sass`
# Check conflicts
isConflicts=`git diff --cached --name-only -S'<<<<<< HEAD'`
if [ -n "$isConflicts" ]; then
echo "Unresolved merge conflicts in this commit:"
echo $isConflicts
fi
# Check PHP syntax
if [ $checkPHP -eq 1 ]; then
for i in `git diff --cached --name-only | grep '.php'`; do
if [ -e $i ]; then
phperror=`$PHP -l "$i" | grep -v 'No syntax errors detected in'`
if [ -n "$phperror" ]; then
echo "PHP errors added in file: " $i
isPHPError='true'
fi
fi
done
fi
# Check CoffeeScript syntax
if [ $checkCoffee -eq 1 ]; then
for i in `git diff --cached --name-only | grep '.coffee'`; do
if [ -e $i ]; then
coffeeerror=`$COFFEE "$i"`
if [ $? -ne 0 ]; then
isCoffeeError='true'
fi
fi
done
fi
# Check SASS syntax
if [ $checkSass -eq 1 ]; then
for i in `git diff --cached --name-only | grep '.sass'`; do
if [ -e $i ]; then
sasserror=`$SASS -c "$i"`
if [ $? -ne 0 ]; then
isSassError='true'
fi
fi
done
fi
isError="$isConflicts$isPHPError$isCoffeeError$isSassError"
###########
if [[ -n $isError ]]; then
echo
echo "Commit with '-n' to bypass checks"
exit 1
fi
@ka2n
Copy link
Author

ka2n commented Oct 21, 2013

コンパイルしない系のファイルはいろいろチェックさせたいな

  • coffee
  • js
  • sass

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment