Подтвердить что ты не робот

Git ошибка с фиксацией прерывания в GitHub для mac (работает в командной строке)

Я создал очень простой pre-commit script: -

#!/usr/bin/env sh

# Run tests
npm test
if [ $? -ne 0 ]; then
  echo "Tests failed. Aborting.."
  exit 1
fi

exit 0

Когда я запускаю git commit в командной строке (с неудачными тестами), я получаю ожидаемый выход 1 с сообщением Tests failed. Aborting...

Однако, если я использую GitHub для Mac, я получаю:

.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
 (256)

Я догадываюсь о том, что npm не доступен для среды исполнения, которую использует GitHub для Mac, но я рвал мои волосы, пытаясь понять, как это исправить.

4b9b3361

Ответ 1

Решенный. Поскольку глобально установленные модули node заканчиваются под /usr/local/bin, мне просто нужно добавить следующее в начале моей предварительной фиксации:

PATH=$PATH:/usr/local/bin:/usr/local/sbin

то есть. добавив как /usr/local/bin, так и /usr/local/sbin в PATH в момент выполнения.

Ответ 2

Переменная $PATH, доступная в графических интерфейсах, таких как Github Desktop и Sourcetree, отличается от той, которая доступна в терминале. По умолчанию $PATH, доступный в среде графического интерфейса, не может найти ваши модули node. Как было сказано в предыдущем ответе, вы можете убедиться, что /usr/local/bin находится в пути, добавив

PATH=$PATH:/usr/local/bin:/usr/local/sbin

В моем случае это не сработало, потому что я использую Node Менеджер версий, в котором хранятся разные версии node и делает легко обновить и переключить версии node. Он сохраняет ваш node_modules для каждой версии node в отдельном файле. Вот код, который я использовал для решения этой проблемы:

#!/usr/bin/env bash

PATH="/usr/local/bin:$PATH"

if [ -f $HOME/.nvm/nvm.sh ]
then
  . $HOME/.nvm/nvm.sh
  PATH="$HOME/.nvm/versions/node/$(nvm current)/bin:$PATH"
fi

Это проверяет NVM, и если оно существует, загружает его и использует для поиска пути к модулям node для текущей версии Node. Если вы пытаетесь получить доступ к модулям node и не нуждаетесь ни в каких специальных целях, вы можете пропустить добавление папки sbin, например. /usr/local/sbin

Ответ 3

Для меня это было то, что у меня не было установленной зависимости, вызываемой из pre-commit. В моем случае это был composer, поэтому мне помог brew install composer.

Для будущих проверок проверьте, не отсутствуют ли какие-либо зависимости, вызываемые в вашем файле предварительной фиксации, открыв your-project-directory/.git/hooks/pre-commit в вашем любимом текстовом редакторе и установив отсутствующие зависимости по мере необходимости.