将CI/CD从GitLab迁移至GitHub Actions时PreCommit报错求助
GitHub Actions中PreCommit运行失败的解决方法
问题背景
将CI/CD从GitLab迁移到GitHub Actions时,PreCommit库无法正常工作,报错提示:
An error has occurred: FatalError: git failed. Is it installed, and are you in a Git repository directory?
问题原因
- Git未安装:你使用的
python:3.11官方容器镜像默认不包含Git,PreCommit依赖Git来识别仓库和管理钩子。 - 多余的git init步骤:
actions/checkout已经将仓库完整拉取到环境中,手动执行git init会覆盖原有仓库的Git元数据,导致PreCommit无法识别当前目录为合法Git仓库。
解决步骤
1. 在容器中安装Git
在Set up Python步骤前添加安装Git的命令,利用容器的包管理器完成安装。
2. 移除git init步骤
删除多余的初始化命令,保留actions/checkout拉取的原始仓库结构。
3. 升级Action组件版本(可选但推荐)
将actions/checkout、actions/setup-python、actions/cache升级到最新稳定版,提升兼容性和可靠性。
修改后的完整Workflow代码
name: CI Workflow on: push: branches: - main jobs: pre-commit-test: runs-on: ubuntu-latest container: image: python:3.11 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Print current directory run: pwd - name: Install Git in container run: | apt-get update apt-get install git -y - name: Set up Python 3.11 uses: actions/setup-python@v5 with: python-version: 3.11 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Check Git version run: git --version - name: Cache pre-commit hooks uses: actions/cache@v4 with: path: ~/.cache/pre-commit key: ${{ runner.os }}-precommit-${{ hashFiles('.pre-commit-config.yaml') }} - name: Install pre-commit run: pip install pre-commit - name: Run pre-commit with debug run: pre-commit run --all-files
关键修改说明
- 新增
Install Git in container步骤,解决容器内Git缺失的核心问题。 - 删除
Initialize Git步骤,避免破坏actions/checkout创建的合法Git仓库。 - 升级各Action组件到最新版,适配GitHub Actions的最新环境。
内容的提问来源于stack exchange,提问作者KurczakChrupiacy2
相关产品推荐
相关产品推荐

