2012-10-14 4 views
19

ich ein sehr einfaches pre-commit Skript erstellt habe: -Git pre-commit Haken in GitHub for mac versagen (funktioniert auf der Kommandozeile)

#!/usr/bin/env sh 

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

exit 0 

Wenn ich git commit in der Befehlszeile ausführen (mit fehlgeschlagenen Tests), bekomme ich den erwarteten Ausgang 1 mit der Nachricht Tests failed. Aborting...

jedoch Wenn ich GitHub for Mac verwenden, aber ich bekomme:

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

ich seine raten bis zu npm nicht auf die Ausführungsumgebung zur Verfügung steht, dass GitHub for Mac verwendet, aber ich habe Ich riss mir die Haare aus und versuchte herauszufinden, wie ich das beheben konnte.

Antwort

22

Gelöst. Als global installierten Knotenmodule unter /usr/local/bin am Ende habe ich einfach notwendig, um die folgenden am Anfang meiner pre-commit hinzuzufügen:

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

heißt anhängt sowohl /usr/local/bin und /usr/local/sbin zu PATH an dem Punkt der Ausführung.

1

Die Variable $ PATH, die in GUI-Umgebungen wie Github Desktop und Sourcetree verfügbar ist, unterscheidet sich von der im Terminal verfügbaren. Standardmäßig kann der in den GUI-Umgebungen verfügbare $ PATH Ihre Knotenmodule nicht finden. Wie in der vorherigen Antwort erwähnt, können Sie das Verzeichnis/usr/local gewährleisten/bin auf dem Weg durch Zugabe ist

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

In meinem Fall nicht funktioniert, weil ich Node Version Manager verwende, die verschiedene Versionen von Knoten speichert und macht es einfach, Knotenversionen zu aktualisieren und zu wechseln. Es speichert Ihre node_modules für jede Version von Node in einer separaten Datei. Hier ist der Code, den ich um dieses Problem zu umgehen verwendet:

#!/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 

Diese Kontrollen für NVM, und wenn es vorhanden ist, lädt sie und verwendet sich den Pfad zu der Knotenmodule für die aktuell verwendete Version von Knoten zu finden. Wenn Sie nur versuchen, auf Knotenmodule zuzugreifen, und nicht auf etwas Besonderes zugreifen müssen, können Sie das Hinzufügen der sbin folder, z. /usr/local/sbin

+0

"Sie können sicherstellen, dass/usr/local/bin im Pfad ist, indem Sie" - hinzufügen, wobei? – sompylasar

+0

@Sompylasar im Pre-Commit-Skript, habe ich das Beispiel gepostet. Ich habe das Skript in der Frage geändert und es in meine Antwort geschrieben. Es ändert den PATH basierend darauf, ob nvm verfügbar ist oder nicht – RustyToms