Python pre-commitをWindowsで使う
Gitフックのpre-commitを利用するとコミットの直前で任意のスクリプトを走らせることができます。
しかしながらpre-commitスクリプトは「.git/hook/」ディレクトリに作成するのでプロジェクト(リポジトリ)で共有してメンテするのに取り回しが悪いです。
Python製のツール、pre-commitを使うとこんな感じの定義ファイル(.pre-commit-config.yaml)を作成して、
これによりプロジェクトとして一つの定義ファイルをメンテしていけば同じpre-commitスクリプトをメンバーで共有できるわけです。
Python pre-commitでは公開されたリポジトリでサポートされているlinterなどを使ったり、ローカルマシンの任意のコマンドを実行させることができます。
で導入しようと思ったのですがそのままではWindowsマシンでうまく動きませんでした。
理由は作成されたpre-commitスクリプトのシバンがこのようになっていて
Windowsのシェルでは認識できない形式になってます。
なので自分の環境のPythonの絶対パスを探して書き換えます。
これでWindowsマシンでもcommit時に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なので自分の環境の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



