Ошибка предварительной фиксации: не удается создать .git / hooks / pre-commit: нет такого файла или каталога

Я думаю, что это проблема Windows / WSL / Linux. любой, кто может помочь, поскольку, когда я устанавливаю предварительную фиксацию и пытаюсь зафиксировать, я получаю сообщение об ошибке:

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
error: cannot spawn .git/hooks/pre-commit: No such file or directory

все программное обеспечение и действия выполняются на wsl2 или терминале vscode (который подключается к wsl)

  • git clone (я могу фиксировать, разветвлять и т. Д. Отлично из vscode)
  • pre-commit run -a работает успешно
  • pre-commit install (говорит, что установка прошла успешно)
  • python3 установлен и работает на wsl

глядя в .git, я вижу папку хуков и файл предварительной фиксации, который находится ниже:

#!/home/linuxbrew/.linuxbrew/opt/pre-commit/libexec/bin/python3
# File generated by pre-commit: https://pre-commit.com
# ID: 138fd403232d2ddd5efb44317e38bf03
import os
import sys

# we try our best, but the shebang of this script is difficult to determine:
# - macos doesn't ship with python3
# - windows executables are almost always `python.exe`
# therefore we continue to support python2 for this small script
if sys.version_info < (3, 3):
    from distutils.spawn import find_executable as which
else:
    from shutil import which

# work around https://github.com/Homebrew/homebrew-core/issues/30445
os.environ.pop('__PYVENV_LAUNCHER__', None)

# start templated
INSTALL_PYTHON = '/home/linuxbrew/.linuxbrew/opt/pre-commit/libexec/bin/python3'
ARGS = ['hook-impl', '--config=.pre-commit-config.yaml', '--hook-type=pre-commit']
# end templated
ARGS.extend(('--hook-dir', os.path.realpath(os.path.dirname(__file__))))
ARGS.append('--')
ARGS.extend(sys.argv[1:])

DNE = '`pre-commit` not found.  Did you forget to activate your virtualenv?'
if os.access(INSTALL_PYTHON, os.X_OK):
    CMD = [INSTALL_PYTHON, '-mpre_commit']
elif which('pre-commit'):
    CMD = ['pre-commit']
else:
    raise SystemExit(DNE)

CMD.extend(ARGS)
if sys.platform == 'win32':  # https://bugs.python.org/issue19124
    import subprocess

    if sys.version_info < (3, 7):  # https://bugs.python.org/issue25942
        raise SystemExit(subprocess.Popen(CMD).wait())
    else:
        raise SystemExit(subprocess.call(CMD))
else:
    os.execvp(CMD[0], CMD)

ОБНОВИТЬ

Это проблема VSCode .. выполнение ручной фиксации vscode использует windows git и поэтому ищет python3 в окнах. Если я использую терминал wsl и запускаю команды git, они работают и используют pre-commit

Угадайте, мой вопрос: есть ли способ использовать vscode git с wsl или нужно использовать окна?


person Staggerlee011    schedule 02.03.2021    source источник
comment
что shebang будет действительным только внутри вашего экземпляра WSL - вы должны совершать коммит вне WSL? - было бы невозможно поддерживать установку в одной ОС, а затем запускать в другой - автор предварительной фиксации   -  person Anthony Sottile    schedule 02.03.2021


Ответы (1)


OK!

Так что это чисто проблема интеграции vscode / wsl и не имеет ничего общего с pre-commit.

Это вызвано vscode с использованием windows git, в то время как я установил предварительную фиксацию и все инструменты для нее на wsl.

Таким образом, вы можете заставить VSCode использовать репозитории и приложения WSL git с помощью расширения: wsl - remote

вы могли бы также обновить settings.json на git.path: , но я этого не тестировал!

person Staggerlee011    schedule 02.03.2021