迁移Rails项目后Overcommit gem阻止Git提交的问题求助
看起来你遇到的问题是迁移项目后,Overcommit的Git钩子还留在仓库里,但你已经不想用这个gem了。哪怕安装后执行overcommit --uninstall也没效果,大概率是因为迁移过来的钩子和当前环境的Overcommit不匹配,导致卸载命令没法正确清理。试试下面的手动清理步骤:
第一步:删除.git/hooks目录下的Overcommit钩子
Git的钩子都存在项目根目录的.git/hooks里,Overcommit会替换默认的钩子文件(比如pre-commit、commit-msg)来注入自己的逻辑。你可以先进入这个目录,查看哪些文件是Overcommit生成的:cd .git/hooks # 查看钩子文件内容,比如pre-commit cat pre-commit如果文件开头有类似
# Overcommit的注释,就把这些钩子删掉:rm -f pre-commit commit-msg pre-push post-commit post-checkout如果你不确定哪些是Overcommit的,也可以保留
.sample后缀的默认钩子模板,删掉其他非.sample的文件(注意:如果你自己加过自定义钩子,要提前备份)。第二步:移除项目根目录的Overcommit配置文件
项目根目录里的.overcommit.yml(或者.overcommit.yml.sample)是Overcommit的配置文件,直接删掉它:rm .overcommit.yml第三步:清理Git本地配置中的Overcommit残留
Overcommit可能会在Git的本地配置里添加一些设置,检查并移除:# 查看是否有Overcommit相关配置 git config --local --list | grep overcommit # 如果有,比如overcommit.enabled=true,就删掉 git config --local --unset overcommit.enabled # 其他相关配置也用同样的命令unset第四步:验证修复效果
现在尝试重新提交:git commit -m 'Test clean commit'应该不会再出现那个关于Overcommit未安装的报错了。
如果之前overcommit --uninstall没用,是因为迁移过来的仓库里的钩子是在原机器上生成的,和你当前环境安装的Overcommit版本可能不兼容,导致卸载命令无法识别这些钩子,手动清理是最直接有效的方法。
内容的提问来源于stack exchange,提问作者Obromios

