Ответ 1
Как насчет назначения вашего крюка pre-commit
(без какого-либо расширения)?
EDIT: и добавьте #!/bin/sh
в первую строку или #!/bin/bash
(предлагается в комментариях)
Я только начинаю смотреть на крючки Git, но я не могу заставить их работать.
Я установил локальный репозиторий, поэтому в папке проекта теперь есть каталог .git. Я добавил файл .cmd в каталог C:/path/to/my/project/.git/hooks с именем 'pre-commit.cmd'. Вот содержание этого файла:
echo "HOOK RUNNING"
echo. 2>C:/path/to/my/project/.git/hooks/EmptyFile.txt
Это должно отразить текст "HOOK RUNNING" и создать пустой текстовый файл в этом каталоге. Однако, если я вношу изменения в свою среду IDE (NetBeans) или использую Git Bash для фиксации, ни один из них, похоже, не запускает мой привязку до фиксации, поскольку файл не создается.
Я понимаю, что все, что вам нужно сделать, чтобы запустить hook, - это добавить исполняемый файл с именем hook (как я сделал). Я что-то делаю неправильно?
Примечание. Это на ПК с Windows 7.
Как насчет назначения вашего крюка pre-commit
(без какого-либо расширения)?
EDIT: и добавьте #!/bin/sh
в первую строку или #!/bin/bash
(предлагается в комментариях)
Вероятно, у вас нет разрешений для запуска файла pre-commit
Запустите в терминале:
chmod +x .git/hooks/pre-commit
Благодаря @vaughan за предоставленную идею
Для меня ни одно из вышеуказанных решений не сработало. Я переместил файл предварительной фиксации из ловушек в другое место, фактически удалив файл из ловушек.
Это сработало для меня: D
в моем случае, когда я npm install
и случайно удалил папку .git, npm install pre-commit --save
Может быть, это кому-нибудь поможет - в моем случае я установил core.hooksPath
в неправильный каталог. Сброс его с помощью git config --global core.hooksPath '~/.githooks'
решил проблему :)
Git hooks по умолчанию работают в Git for Windows, если предположить, что скрипт git hook прост.
Обратите внимание: Git был сделан для интерпретации оболочки; таким образом, использование перехватчиков git в командной строке Windows или Windows PowerShell по своей природе будет иметь свои недостатки, и полная функциональная совместимость не ожидается.
Использование git hooks в Windows возможно, но имеет много недостатков.
Git для Windows использует эмулятор оболочки, который делает возможными команды bash и shell. Это означает, что когда git активируется ловушка git, версия для Windows будет запускать команду, используя эмулятор оболочки. Что, в свою очередь, преобразует эти команды оболочки в команды, понятные операционной системе Windows. Это означает, что простые сценарии оболочки будут работать сразу же. Например, pre-commit
git hook, которая поставляется с инициализацией репозитория git, может быть запущена без изменений.
git init
cd.git\hooks
Этот каталог содержит все скрипты git hook. Создайте файл с именем pre-commit
Note
Имя файла важно
замените содержимое следующим скриптом
#!/bin/sh
echo "Hello, World!"
test.txt
используя команду echo "something" > text.txt
git add test.txt
файл для фиксации с помощью команды git add test.txt
git commit -m "test commit"
git commit -m "test commit"
Hello, World!
[master f00ccea] test commit
При использовании очень продвинутого сценария оболочки для выполнения действий в git-хуках интерпретация оболочки Windows не всегда складывается. Например, при использовании подключаемого модуля Husky Git Hook для NPM вместе с более хорошим форматером команды не отображают 1-1. Это означает, что ваш pre-commit git hook потерпит неудачу в Windows.
Git hook - это исполняемый скрипт; однако вы используете сценарий командной строки (.cmd
), а не сценарий оболочки (.sh
). Если вам нужно такое поведение, которое вы описали в операционной системе Windows, создайте файл с именем pre-commit
и поместите его в каталог .git\hooks
(относительно проекта, над которым вы работаете). Затем поместите следующее содержимое в этот файл.
.git\крючки\перед фиксацией
#!/bin/sh
echo "HOOK RUNNING"
thisCausesError 2> .git/hooks/EmptyFile.txt
Вы заметите, что ловушка git работает и выводит слова HOOK RUNNING
на консоль, и thisCauseError
напечатает сообщение об ошибке в stderr
которое будет напечатано в файле EmptyFile.txt
.