Git退出码138(SIGBUS信号中断)问题求助
解决Mac M1上Git Commit/Push时SIGBUS(退出码138)报错
问题背景
执行git commit或git push时触发退出码138(信号10:SIGBUS中断),场景为:
- 设备:Mac M1(Silicon)
- 项目存储在公司网络共享文件夹
- 团队混合使用Mac M1和Windows系统
已尝试无效方案:
sudo sysctl -w kern.maxfilesperproc=524288sudo sysctl -pgit config --global core.autocrlf true input
核心原因分析
SIGBUS信号本质是内存访问异常,结合你的场景,大概率和网络共享文件夹的文件系统兼容性、Git的ARM架构适配或共享目录的缓存/权限问题相关,Windows成员的系统对该问题影响较小,但跨系统共享的文件格式可能间接触发异常。
针对性解决方案
1. 替换为ARM原生Git版本
Mac M1的Rosetta转译x86版本Git可能在访问共享文件时出现内存异常:
- 检查当前Git架构:
若输出含lipo -info $(which git)x86_64,说明是转译版本 - 安装ARM原生Git(确保Homebrew为ARM版本,路径
/opt/homebrew/bin/brew):brew reinstall git - 验证:再次执行
lipo -info $(which git),确认包含arm64
2. 迁移项目到本地磁盘操作
网络共享文件夹(如SMB)的文件系统在处理Git对象库(.git)的原子操作时存在兼容性问题:
- 将项目克隆到本地磁盘(如
~/Projects目录) - 日常在本地完成提交、推送,再同步到共享文件夹(可使用
rsync或手动复制)
3. 重置Git配置并清理仓库缓存
修正错误配置并清理可能损坏的缓存:
- 重置换行符配置:
git config --global --unset core.autocrlf git config --global core.autocrlf input - 清理仓库对象和缓存:
git gc --prune=now git fsck --full
4. 调整SMB共享挂载参数
若使用SMB共享,修改挂载参数提升兼容性:
- 卸载现有共享目录:
sudo umount /Volumes/[你的共享目录名] - 重新挂载并添加参数:
注:密码可留空,挂载时会提示输入;替换括号内的实际信息sudo mount -t smbfs //[用户名]:[密码]@[服务器地址]/[共享名] /Volumes/[你的共享目录名] -o nobrowse,noatime
5. 排查系统层面问题
- 关闭不必要的后台进程,降低内存占用(通过活动监视器查看内存使用率)
- 修复磁盘权限:
sudo diskutil repairPermissions /
内容的提问来源于stack exchange,提问作者Stella Park
相关产品推荐
相关产品推荐

