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

Pre-commit钩子因index.lock已存在持续失败的解决求助

解决pre-commit钩子git锁冲突及自动暂存问题

问题根源

pre-commit运行期间会持有.git/index.lock锁,你在钩子的entry里手动执行git add -u时,会因为锁被占用而触发fatal: Unable to create 'xxx/.git/index.lock': File exists错误,导致钩子执行失败。而且pre-commit本身就支持自动暂存钩子修改的文件,不需要手动调用git命令。

解决方案

1. 清理残留的git锁文件

先手动删除已存在的锁文件,避免后续操作继续报错:

rm -f .git/index.lock

2. 修改pre-commit配置,移除手动git add操作

修改.pre-commit-config.yaml,去掉钩子entry中的bash -c 'xxx; git add -u' --部分,恢复钩子的默认执行逻辑,让pre-commit自动处理文件暂存:

修改后的配置片段:

repos:
  - repo: https://github.com/psf/black
    rev: 22.12.0
    hooks:
      - id: black
        name: Run black on staged py files
        # 移除手动git add,pre-commit会自动暂存修改
  - repo: local
    hooks:
      - id: pretty-quick
        name: Prettify staged js/ts/yml files
        language: system
        entry: bash -c "if [ -d \"frontend\" ]; then cd frontend; yarn pretty-quick; else echo 'Skipped'; fi"
  - repo: https://github.com/IamTheFij/docker-pre-commit
    rev: v2.1.1
    hooks:
      - id: docker-compose-check
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: check-toml
      - id: requirements-txt-fixer
      - id: fix-encoding-pragma
        args: [--remove]  # 仅保留需要的参数,使用钩子默认entry
      - id: debug-statements
        # 使用钩子默认entry,无需手动git add

3. 重新运行pre-commit验证

配置修改完成后,执行以下命令验证钩子是否正常工作:

pre-commit run --all-files

之后再尝试提交代码,钩子会自动处理文件修改并完成暂存,不会再出现锁冲突错误。

补充说明

pre-commit的工作机制是:在运行钩子时,会将暂存的文件复制到临时目录(或直接在原目录操作但持有索引锁),钩子修改文件后,pre-commit会自动识别这些修改并将其合并回主暂存区,完全不需要手动执行git add。手动添加git命令反而会破坏这个流程,导致锁冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:25:22