Usar los ganchos de precompilation de git en el context del cliente de GitHub

Creé un script precomprometido para git, que funciona bien cuando se ejecuta a través de la command-line. Aquí está ese script:

#!/bin/sh # # Pre-commit hooks echo "Running unit tests..." # Lint stuff before commiting grunt runtests RESULT=$? [ $RESULT -ne 0 ] && echo "Tests (or tasks) failed, aborting the commit" && exit 1 echo "All tests passed, commiting your changes" && exit 0 

Me gustaría que el compromiso previo también funcione a través de la aplicación cliente de GitHub, pero no puedo hacerlo funcionar. El script de precompromiso se ejecuta, pero arroja un error. Aquí está el text completo que devuelve en la window de alerta del cliente:

 Running unit tests... .git/hooks/pre-commit: line 7: grunt: command not found Tests (or tasks) failed, aborting the commit (1) 

Por alguna razón, no puede encontrar gruñidos. Volví a instalar el grun cli y usé el indicador global '-g', pero eso no hizo ninguna diferencia. ¿Alguna idea de cómo puedo hacer que el cliente encuentre gruñidos?

Las aplicaciones GUI en OS X no cargan las cosas en .bashrc / .bash_profile, lo que significa que no tendrán adiciones $ PATH especificadas por el usuario como /usr/local/bin , que es donde está el binary ronco. Puede especificar la ruta completa o corregir $ PATH en su enlace precompromiso, agregando esto después de los comentarios principales: PATH="/usr/local/bin:$PATH"

Si está utilizando sourcetree (en Mac) y tiene anzuelos precompuestos y pre-push, abra el tree de fonts con la línea de command en lugar de abrirlo directamente, con el siguiente command.

 open /Applications/SourceTree.app/Contents/MacOS/SourceTree 

Ahora sus ganchos funcionarán cuando intente comprometerse y empujar. Estoy seguro de que también funciona para la aplicación github.

Si desea ejecutar un script que obtenga su entorno ( $PATH , etc.) debe cambiar la primera línea de su script a partir de esto:

 #!/bin/sh 

a:

 #!/usr/bin/env sh 

Luego llame a grunt sin el path codificado.

De esta forma, si la ruta a su ejecutable cambia en el futuro o es diferente en otras máquinas, la secuencia de commands seguirá funcionando. /usr/bin/env obtendrá el entorno del usuario con el que se ejecuta el script. Esto es realmente útil en lugares donde algunas personas usan diferentes administradores de packages pero necesitan ejecutar los mismos scripts. De lo contrario, podría terminar con mucha lógica buscando aplicaciones que podrían haberse evitado dependiendo de una $PATH debidamente poblada.

Excelente respuesta de Sindre Sorhus:

Las aplicaciones GUI en OS X no cargan las cosas en .bashrc / .bash_profile, lo que significa que no tendrán adiciones $ PATH especificadas por el usuario como /usr/local/bin , que es donde está el binary ronco. Puede especificar la ruta completa o corregir $ PATH en su enlace precompromiso, agregando esto después de los comentarios principales: PATH="/usr/local/bin:$PATH"

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 versiones de Node. Almacena sus modules de Nodo para cada versión de Node en un file separado. Aquí está el código que utilicé para 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 modules de nodo para la versión de Nodo actualmente utilizada.

como una solución simple que especifica la ruta completa absoluta a roncar debería funcionar. si necesita que se configure más su entorno, debe investigar cómo la aplicación github crea el entorno para los enganches.