Git не может выполнить python- script как hook

Я создал небольшой pre-commit hook в python. Этот хук работает как прелесть под Linux, но в Windows он продолжает говорить мне:

error: cannot spawn .git/hooks/pre-commit: No such file or directory

Я знаю, что здесь были похожие вопросы по одной и той же проблеме, а выводы швов - это shebang. Мой script имеет это в самой первой строке:

#!F:\PortableApps\PortablePython3.2\App\python.exe

Также интересно отметить, что выполнение script просто путем записи .git/hooks/pre-commit отлично работает, но как только я пытаюсь зафиксировать, git выплескивает вышеприведенное сообщение.

Еще одна интересная вещь: когда я конвертирую кодировку из ANSI в UTF-8 (используя Notepad ++), я получаю следующую ошибку при попытке выполнить script:

.git/hooks/pre-commit: Cannot execute binary file

Я использую следующие инструменты:

Ответ 1

Я использовал прокси-подход, чтобы сделать python script работать под окнами (с msysgit). Полный script (с описанием о том, как я это сделал) можно найти здесь: https://gist.github.com/1839424

Вот важная часть о том, как заставить ее работать под Windows


Если вы работаете с Windows (и msysgit), это немного сложнее. Поскольку "msysgit", похоже, имеет проблемы с обработкой SHEBANG, вам придется использовать небольшой трюк, чтобы сделать script исполняемый файл (дополнительную информацию по этой проблеме можно найти здесь).

Чтобы сделать работу script, вы хотите удалить SHEBANG из Python script ( "pre-commit.py" ) и использовать обертку bash - script для вызова переводчик. Этот script должен выглядеть примерно так:

#!/bin/sh
python .git/hooks/pre-commit.py

Сохраните этот script как файл с именем pre-commit (без окончания файла). Это предполагает, что у вас есть Python в PATH. Если вы этого не сделаете, вы также можете указать полный путь к исполняемому интерпретатору.

Этот script будет вызван "git commit" и вызовет python- script для проверки огромных файлов. Путь после SHEBANG не должен изменяться, так как msysgit автоматически перенастроит его. Вы должны указать путь относительно репо-корня для выполняемого Python script (потому что тот, откуда вызывается script).

Затем вы захотите скопировать оба файла-обертки ( "pre-commit" ) и Python- script ( "pre-commit.py" ) в ваш репозиторий ".git/hooks" -каталог, персонализировать Python- script ( "max_file_size" и "git_binary_path" ) и пометить исполняемый файл "pre-commit" -file.