tag tab remove practices crear commits commands best git github atlassian-sourcetree github-for-mac

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.