git push代码到远程仓库中会遇到这样的情况,你以为是一个很简单的提交,没经过编译就提交到了远程仓库,然而意想不到的事情发生了,远程仓库编译失败。这时候就需要你重新修改提交,重新修改,耽误时间,而且还有可能造成损失。
怎么办呢,提交之前先自己编译一下就可以解决问题。这样很好,可是不是每次都会记得,特别是比较紧急的时候可能就不会去编译验证了。这时候就想到git钩子脚本,git钩子脚本可以在执行一些动作之前执行一个脚本,做一些固定的或者验证性质的工作,是不是也可以用来在push代码到远程仓库的时候执行编译命令,下面是git仓库钩子脚本目录下面默认的一下脚本样例:
我们看到有这样一个样例 `pre-push.sample`,看名字可以知道这就是我们要找的在push前执行的脚本,看到了希望。首先把扩展名去掉,文件名变成`pre-push`,内容做了简单的修改,把样子中的命令替换成项目的编译命令,就变成了这样:
```
#!/bin/sh
./gradlew assembleInternalDebug > /dev/null 2>&1
exit $?
```
这里是android项目,所以调用的时gradlew命令,可以替换成别的编译命令,最后需要返回命令结果`exit $?`,如果返回0,则push命令执行,否则不执行。这样以来push代码就放心多了,push上去的必然是编译通过的。
虽然放心了,但是名词push的时间边长了,因为每次push之前都要执行一次编译,但是为了不把无法编译通过的代码提交到远程仓库,多花一些编译时间是值得的,这样也可以变相使自己更加仔细。如果对代码非常有自信也可以通过添加参数`--no-verify`就可以disable验证命令,如:`git push origin --no-verify`