雖然規定團隊Coding Standard要follow PSR規範
不過實在不容易一項項比對~ 再說改都是小地方,實在不知怎麼盯起
聽朋友推薦神器~ git hooks!!!
在commit前,會觸發相關的script檢查
因此只搭PSR定義的script就可以強制規範Coding Standard
這真是太棒了!!!
後來發現原來早就有這東西了~ 而且還滿多運用的~
現在看團隊每次commit前,就得先努力的code修成符PSR規範
心理莫明的覺得好爽~~ 哈哈
使用過程遇到的問題
不過實在不容易一項項比對~ 再說改都是小地方,實在不知怎麼盯起
聽朋友推薦神器~ git hooks!!!
在commit前,會觸發相關的script檢查
因此只搭PSR定義的script就可以強制規範Coding Standard
這真是太棒了!!!
- 安裝三步驟
- install git
# yum install git - install PHP Code Sniffer
# pear install PHP_CodeSniffer - setup script
裝好PHP_CodeSniffer後,到git專案的資料夾下找.git/hooks資料夾
# cd project/.git/hooks
# vi pre-commit #記得要chmod 755 pre-commit
可以在不同時機點觸發script,這邊就指定pre-commit時,相對也有post-commit,按這看更多
#!/usr/bin/php <?php $output = array(); $return = 0; exec('git rev-parse --verify HEAD 2> /dev/null', $output, $return); // Get GIT revision $against = $return == 0 ? 'HEAD' : '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; // Get the list of files in this commit. $output = array(); exec("git diff-index --cached --name-only {$against}", $output); $filename_pattern = '/\.php$/'; $exit_status = 0; // Loop through files. foreach ($output as $file) { if ( ! preg_match($filename_pattern, $file)) { // don't check files that aren't PHP continue; } // If file is removed from git do not sniff. if ( ! file_exists($file)) { continue; } $lint_output = array(); // Run the sniff exec("phpcs --standard=PSR2 --warning-severity=0 " . escapeshellarg($file), $lint_output, $return); if ($return == 0) { continue; } echo implode("\n", $lint_output), "\n"; $exit_status = 1; } exit($exit_status);
- install git
- 使用方法
很簡單,commit前,就會觸發,如果有未符合規範,就出現如下的訊息
一行行修吧 = =+
如果只是驗證單一隻程式的話,就以直接在console下
也不用一定得透過commit觸發script
# phpcs --standard=PSR2 --warning-severity=0 [檔案名稱]
後來發現原來早就有這東西了~ 而且還滿多運用的~
現在看團隊每次commit前,就得先努力的code修成符PSR規範
心理莫明的覺得好爽~~ 哈哈
使用過程遇到的問題
- .git/hooks/pre-commit: No such file or directory
找好久,一直看不出問題...
後來查是換行符號問題!!!當初朋友給的時候是從linux的檔案複製容到,直接貼到windows下txt裡...
把\r去掉就好了...
# cp .git/hooks/pre-commit /tmp/pre-commit
# tr -d '\r' < /tmp/pre-commit > .git/hooks/pre-commit
References
Pre Commit hook git error
沒有留言:
張貼留言