Go
Git
golang

gitのpre-commitを使ってbuildに失敗するコミットを防ぐ

問題だったこと

私はgoでコード書いていてしばしばコミットした後にbuildしてエラー。
修正してコミットみたいな生産性の低いことをやっていました。

これをどうにかするためにgitのpre-commitを使ってみることとしました。

手順

$ vi .git/hooks/pre-commit
pre-commit
#!/bin/sh

# build project
build_result=$(make)
build_rc=$?
if [ $build_rc -ne 0 ] ; then
    echo "git pre-commit check failed: build failed."
    exit 1
fi
$ chmod +x .git/hooks/pre-commit

これでcommit時にmakeコマンド(build命令していると思ってください)が走って
失敗した場合はcommitが作られないようになります

サンプル

$ vi main.go
main.go
package main

func main() {
    a := 1
}
$ git add .
$ git commit -m "init"
github.com/smith-30/sample-git
# github.com/smith-30/sample-git
./main.go:4:2: a declared and not used
make: *** [build] Error 2
git pre-commit check failed: build failed.

修正

main.go
package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
}
$ git add .
$ git commit -m "init"
[master d34bde1] init
 1 file changed, 8 insertions(+)
 create mode 100644 main.go

# yatta

参考

https://gist.github.com/tamas-molnar/b76f7cc64902dbcf10f2