在 Windows 中运行预提交 python 包会出现 ExecutableNotFoundError: Executable `/bin/sh`

afr*_*111 1 python pre-commit pre-commit-hook python-3.x pre-commit.com

我正在开发一个pre-commit==2.15.0已添加到 python 需求文件中的项目。我安装了要求。现在,当我尝试执行以下操作时,git commit出现以下错误:

An unexpected error has occurred: ExecutableNotFoundError: Executable `/bin/sh` not found
Check the log at C:\Users\username\.cache\pre-commit\pre-commit.log
Run Code Online (Sandbox Code Playgroud)

在我的预提交日志中,我有:

pre-commit version: 2.15.0
sys.version:
    3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)]
sys.executable: c:\users\username\appdata\local\programs\python\python39\python.exe
os.name: nt
sys.platform: win32

Traceback (most recent call last):
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\error_handler.py", line 65, in error_handler
    yield
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\main.py", line 368, in main
    return hook_impl(
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\commands\hook_impl.py", line 231, in hook_impl
    retv, stdin = _run_legacy(hook_type, hook_dir, args)
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\commands\hook_impl.py", line 42, in _run_legacy
    cmd = normalize_cmd((legacy_hook, *args))
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\parse_shebang.py", line 82, in normalize_cmd
    exe = normexe(cmd[0])
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\parse_shebang.py", line 61, in normexe
    _error('not found')
  File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\parse_shebang.py", line 51, in _error
    raise ExecutableNotFoundError(f'Executable `{orig}` {msg}')
pre_commit.parse_shebang.ExecutableNotFoundError: Executable `/bin/sh` not found
Run Code Online (Sandbox Code Playgroud)

我在 Windows 上工作,而我的队友在 Mac 上工作。

看起来预提交正在尝试引用/bin/shWindows 中不存在的脚本。我如何让这个预提交工作?

Ant*_*ile 5

您之前的 git hook 使用的是不可移植的 shebang ( #!/bin/sh) (在您的情况下,该文件将位于.git/hooks/pre-commit.legacy-- 最初.git/hooks/pre-commit

如果您调整要使用的工具,#!/usr/bin/env sh那么预提交将能够运行它(即使在 Windows 上)

或者,如果您不想pre-commit在迁移模式下使用,请运行pre-commit install --force

您还使用了过时的版本,pre-commit该版本可能会导致您的问题 - 所以我建议升级该版本


免责声明:我创建了预提交