tab - Error de enganche de confirmación previa de Git en GitHub para mac(funciona en la línea de comandos)
git tag commits (2)
He creado un script de pre-commit muy simple: -
#!/usr/bin/env sh
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Aborting.."
exit 1
fi
exit 0
Cuando ejecuto git commit
en la línea de comando (con Tests failed. Aborting..
), obtengo la salida 1 esperada con el mensaje Tests failed. Aborting..
Tests failed. Aborting..
Sin embargo, si uso GitHub para Mac, obtengo:
.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
(256)
Supongo que es npm
no estar disponible para el entorno de ejecución que usa GitHub para Mac, pero he estado arrancándome el pelo al intentar solucionarlo.
La variable $ PATH que está disponible en entornos GUI como Github Desktop y Sourcetree es diferente a la disponible en el terminal. Por defecto, el $ PATH disponible en los entornos GUI no puede encontrar los módulos de su nodo. Como se indicó en la respuesta anterior, puede asegurarse de que / usr / local / bin esté en la ruta agregando
PATH=$PATH:/usr/local/bin:/usr/local/sbin
En mi caso, esto no funcionó porque estoy usando Node Version Manager , que almacena diferentes versiones de Node y facilita la actualización y el cambio de las versiones de Node. Almacena sus node_modules para cada versión de Node en un archivo separado. Aquí está el código que solía resolver este problema:
#!/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
Esto busca NVM y, si existe, lo carga y lo usa para encontrar la ruta a los módulos de nodo para la versión actualmente usada de Node. Si solo está intentando acceder a los módulos de nodo y no necesita acceder a nada especial, puede omitir la adición de la carpeta sbin , por ejemplo, /usr/local/sbin
Resuelto. Como los módulos de nodo instalados globalmente terminan en /usr/local/bin
, simplemente necesitaba agregar lo siguiente al comienzo de mi pre-confirmación:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
es decir, agregar /usr/local/bin
y /usr/local/sbin
a PATH
en el punto de ejecución.