.husky/commit-msg: cannot execute binary file husky - commit-msg script failed (code 126)

本文讲述了作者在使用huskyv9和commitlint时,在WindowsVSCode环境下遇到的问题,即echo命令在WindowsPowerShell中的差异导致的.husky/commit-msg脚本执行失败。解决方案是在GitBash环境中运行,或者复制pre-commit文件重命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2024.02.05更新:
感觉找到原因了。在husky的v9版本更新中,它里面写了v9的添加钩子命令,即使用echo方式,是适用于linux/mac的。
在这里插入图片描述
而我写项目时是用windows+vs code,其vs code的终端在wins下是使用powershell的,但是echo在unix/mac和wins中的使用是有差异的。

因此如果想在wins下使用这条命令创建添加钩子文件,可以在git bash环境下使用,因为git bash 使用的是类似 Unix 的环境。而最后我在测试的时候发现确实是这样的,最后钩子文件在git commit时是可以生效的。

所以这两种在解决方式的使用就因人而异吧。在wins+vs code中使用时感觉直接复制粘贴并改名更方便一点。

--------------------分割线--------------------
2024.02.04:

commitlint官方推荐说可以结合husky(v9版本)一起使用:

npm install --save-dev husky

npx husky init

# Add commit message linting to commit-msg hook
echo "npx --no-install commitlint --edit $1" > .husky/commit-msg

这条命令会下载并初始化husky,然后创建commit-msg钩子并在里面添加commitlint的检查命令。这样在git commit的时候会检查注释的规范。
但是我在git commit时,发生了以下错误:

.husky/commit-msg: .husky/commit-msg: cannot execute binary file
husky - commit-msg script failed (code 126)

非常遗憾的是,我在谷歌了114514次后还是没能找到解决办法,,在stackoverflow上只能找到一个解决方案,但是它不是针对于最新版本(v9)的。

目前只能想到通过复制一份husky初始化时自动创建的pre-commit文件,然后将其重命名为其他钩子的名称再使用。

### Git 推送时出现 'cannot execute binary file' 的错误分析 当遇到 `Git push cannot execute binary file` 这类错误时,通常是因为某些文件被标记为可执行文件,但在目标环境中无法正常运行这些二进制文件。以下是可能的原因以及解决方案: #### 可能原因 1. **文件权限问题** 如果某个文件被设置为可执行文件(即具有执行权限),而该文件实际上并不是一个有效的可执行程序,则可能会触发此错误。 2. **跨平台兼容性问题** 当在不同操作系统之间传输文件时(例如从 Windows 到 Linux 或反之亦然),如果文件包含特定于某操作系统的二进制数据,可能导致目标环境无法识别并执行。 3. **钩子脚本未正确配置** 如果项目中启用了 Git 钩子(如 Husky 提供的 pre-commit 钩子),但钩子脚本本身缺少执行权限或存在语法错误,也可能引发此类问题[^1]。 --- ### 解决方案 #### 方法一:检查并修复文件权限 确保所有涉及的文件拥有正确的权限。对于需要执行的脚本文件,可以使用以下命令赋予其执行权限: ```bash chmod +x 文件路径 ``` 例如,在使用 Husky 时,可以通过如下方式解决钩子不可执行的问题: ```bash chmod +x .husky/pre-commit ``` #### 方法二:禁用不必要的二进制文件提交 如果确认某些文件不应该作为可执行文件处理,可以在 `.gitattributes` 中指定它们的行为。创建或编辑 `.gitattributes` 文件,并添加类似以下内容来强制将其视为普通文本文件: ``` *.extension -exec ``` 其中 `*.extension` 是指代具体文件类型的通配符。 #### 方法三:调整 Git 配置以忽略模式差异 有时由于换行符或其他格式上的区别,导致文件被认为是不同的二进制版本。可通过全局或局部修改 Git 设置避免这种情况发生: ```bash git config --global core.autocrlf false ``` 或者针对单个项目应用更改: ```bash git config core.autocrlf input ``` #### 方法四:重新初始化仓库中的钩子管理工具 如果是因 Husky 初始化不当引起的问题,尝试删除现有钩子目录后再重新安装依赖项和服务端支持功能: ```bash rm -rf .husky/ npx husky install ``` #### 方法五:验证 MySQL 安装过程的影响 (若有相关联) 虽然题目主要讨论的是关于 Git 的问题,但如果整个开发流程涉及到数据库服务部署(比如引用提到的 MySQL 编译包安装情况[^2]),也需要留意是否存在潜在冲突影响到最终构建产物的状态判断逻辑。 --- ### 总结 上述方法涵盖了从基础层面排查至高级场景下的多种可能性。实际操作过程中可根据具体情况选用合适策略加以应对。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值