当我们使用sourcetree提交代码时,有时候会碰到以下错误提示:
pre-commit hook failed (add --no-verify to bypass)
这是由于sourcetree在提交代码前会自动运行git hook,如果其中有任何一个hook执行失败,就会发生此错误,导致无法提交代码。
那么如何解决这个问题呢?下面从多个方面进行阐述。
一、检查git hook是否存在
首先我们需要检查是否存在.git/hooks/pre-commit文件。如果该文件不存在,那么就会导致commit时出现错误。而在这种情况下,我们只需要复制项目模板中的.git/hooks/pre-commit.sample文件并将其重命名为pre-commit,就可以解决问题。
$ cd /path/to/project/root $ cp .git/hooks/pre-commit.sample .git/hooks/pre-commit
二、查看git hook中是否有错误
如果.git/hooks/pre-commit文件存在,但是依然出现了pre-commit hook failed的错误,那么我们需要查看.git/hooks/pre-commit的内容,以便找出其中的错误。
打开.git/hooks/pre-commit文件,查看其中的脚本内容,寻找错误的原因。这里提供一个常见的错误示例,脚本中出现了以下代码:
# some invalid code echo "Hello world!"
可以看到,脚本中有一行无效的代码,这将导致pre-commit hook执行失败。此时只需要将无效的代码删除或者进行修复即可。
三、禁用pre-commit hook
如果我们无法找到pre-commit hook中的错误,或者无法快速解决它们,那么我们也可以考虑禁用pre-commit hook。在进行如下操作前,要确保您已经了解了pre-commit hook的作用,禁用前请三思。
禁用的方法非常简单,只需要在提交代码时添加--no-verify选项即可。
$ git commit --no-verify
这个选项会跳过所有的git hook,包括pre-commit hook,因此在使用时要慎重考虑。
四、更新sourcetree
在某些情况下,sourcetree版本过旧也会导致pre-commit hook失败。在这种情况下,我们只需要更新sourcetree的版本即可。
打开sourcetree,选择菜单栏上的“Sourcetree > Check for Updates”,便可检测更新并下载新版本。
五、重置本地仓库
如果以上方法均无法解决问题,我们可以考虑重置本地仓库。重置本地仓库会删除所有的未提交修改,因此在进行此操作前,需要先备份自己的重要文件。
在终端中执行以下命令,将重置本地仓库:
$ cd /path/to/project/root $ git reset --hard
执行完毕后,再次尝试提交代码,应该就可以正常提交了。
六、总结
通过以上几个方面的处理,我们可以顺利解决sourcetree提交报错pre-commit hook failed的问题。首先要检查.git/hooks/pre-commit文件是否存在,其次查看脚本中是否有错误,如果以上两条都无法处理,可以考虑禁用pre-commit hook,更新sourcetree的版本或者重置本地仓库。