Python pre-commitをWindowsで使う

Gitフックのpre-commitを利用するとコミットの直前で任意のスクリプトを走らせることができます。

しかしながらpre-commitスクリプトは「.git/hook/」ディレクトリに作成するのでプロジェクト(リポジトリ)で共有してメンテするのに取り回しが悪いです。

Python製のツール、pre-commitを使うとこんな感じの定義ファイル(.pre-commit-config.yaml)を作成して、
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
    # Linter
-   repo: https://gitlab.com/pycqa/flake8
    rev: 3.8.4
    hooks:
    -   id: flake8
        files: ^app/

    # Auto Lint
-   repo: https://github.com/pre-commit/mirrors-autopep8
    rev: v1.5.4
    hooks:
    -   id: autopep8
        files: ^app/

    #Test
-   repo: local
    hooks:
      - id: pytest
        files: ^app/
        name: pytest
        entry: pytest
        language: system
それを「pre-commit install」コマンドを実行することで各々のローカルに同じpre-commitスクリプトを作成してくれます。
これによりプロジェクトとして一つの定義ファイルをメンテしていけば同じpre-commitスクリプトをメンバーで共有できるわけです。

Python pre-commitでは公開されたリポジトリでサポートされているlinterなどを使ったり、ローカルマシンの任意のコマンドを実行させることができます。

で導入しようと思ったのですがそのままではWindowsマシンでうまく動きませんでした。

理由は作成されたpre-commitスクリプトのシバンがこのようになっていて
#!/usr/bin/env python
# File generated by pre-commit: https://pre-commit.com
Windowsのシェルでは認識できない形式になってます。
なので自分の環境のPythonの絶対パスを探して書き換えます。
>where python3
C:\Users\user\AppData\Local\Microsoft\WindowsApps\python3.exe
#!c:/Users/user/AppData/Local/Microsoft/WindowsApps/python3
# File generated by pre-commit: https://pre-commit.com
これでWindowsマシンでもcommit時にpre-commitスクリプトが走るようになります。