git pushした後にjenkinsさんに怒られるより、
git commitで簡易チェックしたほうが良くない?のお話。
git hook
文字通り、commitをhookします
★参考にさせて頂きました。
Git hooks まとめ
http://qiita.com/khlizard/items/dfe1ec9d82c0ed5da7c6
pre-commitに動かしたい処理を書けば、commit直前に実行できる。
$ cd {PATH_TO_PROJECT_GIT}/.git/hooks
$ cp -p pre-commit.sample pre-commit
pre-commit
commitするファイルを対象に、構文チェックします
★参考にさせて頂きました。
エラーのあるファイルはコミットしない(git編)
http://sotarok.hatenablog.com/entry/20090223/1235363846
★(余談)Gitのpre-commit.sampleにある4b825dc642cb6eb9a060e54bf8d69288fbee4904とは?
http://qiita.com/fieldville/items/5518ed98ce38eb9df351
pre-commitを編集して、実行権限を付与して、git commitします
$ vi pre-commit
#!/usr/bin/php
<?php
$output = array();
$return = 0;
//直近のcommit hashタグを取得する
exec('git rev-parse --verify HEAD 2> /dev/null', $output, $return);
$against = $return == 0 ? 'HEAD' : '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
//stagingにいる修正ファイル名を取得する
exec("git diff-index --cached --name-only {$against}", $output);
$filename_pattern = '/\.php$/';
$exit_status = 0;
foreach ($output as $file) {
if (!preg_match($filename_pattern, $file)) {
// don't check files that aren't PHP
continue;
}
$lint_output = array();
//構文をチェックする
exec("php -l " . escapeshellarg($file), $lint_output, $return);
if ($return == 0) {
continue;
}
echo implode("\n", $lint_output), "\n";
$exit_status = 1;
}
exit($exit_status);
$ chmod -x pre-commit
「構文をチェックする」のところをしたいコマンドに変えれば、なんでもチェックできますね。
$ git add {任意のファイル群}
$ git commit -m "pre-commitテスト"
-- 構文チェックの内容 --
commitが完了しません!