You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode DevContainer中git commit报错:pre-commit存在却提示找不到

解决DevContainer中pre-commit钩子提示"No such file or directory"的问题

问题分析

结合你给出的环境信息,问题核心是:DevContainer内明明存在pre-commit钩子文件,但执行git commit时却提示找不到该文件。大概率是Windows与Linux的换行符不兼容,或是Debian Slim镜像缺少bash环境导致的。

解决方案

1. 转换文件换行符为LF

Windows系统默认使用CRLF换行,而Linux容器仅识别LF换行。如果pre-commit钩子是在Windows主机创建/复制到容器的,shebang行(#!/bin/bash)会被附加\r字符,系统会尝试寻找/bin/bash\r这个不存在的文件,从而触发报错。

操作方式:

  • 在VSCode中打开pre-commit文件,点击右下角的CRLF按钮,切换为LF后保存文件。
  • 或在容器内通过命令转换:
# 先安装转换工具(若容器未预装)
apt update && apt install -y dos2unix
# 转换文件换行符
dos2unix .git/hooks/pre-commit

2. 替换shebang为/bin/sh

Python slim系列镜像(如python:3.10-slim-bullseye)默认未安装bash,仅提供POSIX兼容的sh。将钩子的shebang从#!/bin/bash改为#!/bin/sh,确保容器能找到脚本解释器:

修改后的极简钩子示例:

#!/bin/sh

echo "test"

3. 直接运行钩子验证报错

在容器内进入项目目录,直接执行钩子文件,查看具体错误信息:

./.git/hooks/pre-commit
  • 如果提示bash: command not found,说明容器确实缺少bash,直接用方案2即可解决。
  • 如果仍提示权限问题(虽已设777,可再次确认),执行:
chmod +x .git/hooks/pre-commit

验证

完成上述操作后,再次执行git commit -m "test",钩子应能正常输出"test"并完成提交流程。

内容的提问来源于stack exchange,提问作者johhny tex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:10:10