git hooks
Table of Contents
#
git hooks
和其他版本控制系統一樣,當某些重要事件發生時,Git 有方法可以觸發自訂腳本。有兩組掛鉤(hooks):用戶端和伺服器端。用戶端掛鉤用於用戶端的操作,如提交和合併。伺服器端掛鉤用於 Git 伺服器端的操作,如接收被推送的提交。你可以為了各種不同的原因使用這些掛鉤,下面會講解其中一些。
git hooks 簡單的說就是在進行版本控管時可以再額外多做一些事
在以前我們公司在前端開發上是用前輩大大寫好的 hook 做一些事 但前輩大大們陸續離開後, 架構又改了 新專案沒法用原有的 hook 所以只好跳進來寫 hook 了
##
可以用來幹嘛?
###
Client side
- lint 檢查
- coding style 檢查
- 完善要推的 code
- 做自動化測試
- …
###
Server side
- deploy code to production
- auto build
- …
##
打算用來幹嘛?
身為一隻前端攻城獅, 只要顧好 client side 就好了 預計完成
- phpcs
- jshint
image trans to png8 ?multi-lang file check ?
##
Log
使用 pre-commit 在 commit 前檢查 使用 php 撰寫(基本上都可以指定用哪個程式語言寫 ex: php、ruby、python …)
#!/usr/bin/php
# first npm install -g jshint
# jshint
<?php
$error = false;
// $path = "~/miiitv_plus/";
$path = "";
exec("git diff --cached --name-only --diff-filter=ACM | grep '\.js'", $output_js, $return_var);
if (!empty($output_js))
{
foreach ($output_js as $file) {
$file_path = $path . $file;
if (!empty(shell_exec("jshint " . $file_path . "")))
{
echo $file_path;
echo "\n";
echo "--------------------";
echo "\n";
echo shell_exec("jshint " . $file_path . "");
echo "\n";
echo "====================";
$error = true;
}
}
}
# http://tedshd.logdown.com/posts/246406-php-install-phpcsphp-codesniffer
# phpcs
exec("git diff --cached --name-only --diff-filter=ACM | grep '\.php'", $output_php, $return_var);
if (!empty($output_php))
{
foreach ($output_php as $file) {
$file_path = $path . $file;
if (!empty(shell_exec("phpcs " . $file_path . "")))
{
echo $file_path;
echo "\n";
echo "--------------------";
echo "\n";
echo shell_exec("phpcs " . $file_path . "");
echo "\n";
echo "====================";
$error = true;
}
}
}
if ($error)
{
exit(1);
}
else
{
exit(0);
}
?>
不過使用 phpcs 會太悲催, 就跟用 jslint 一樣, 所以之後又請後端改成適合的 sniffer