Verwendung von Git-Pre-Commit-Hooks im Kontext des GitHub-Clients

8

Ich habe ein Vorab-Skript für git erstellt, das funktioniert, wenn es über die Befehlszeile ausgeführt wird. Hier ist das Skript:

%Vor%

Ich würde mir wünschen, dass das Vorab-Commit auch über die GitHub-Client-Anwendung funktioniert, aber das funktioniert nicht. Das Vorab-Commit-Skript wird ausgeführt, es wird jedoch ein Fehler ausgegeben. Hier ist der vollständige Text, den er im Client-Alarmfenster zurückgibt:

%Vor%

Aus irgendeinem Grund ist es nicht in der Lage, grunzen zu finden. Ich habe den grunt cli erneut installiert und die globale '-g'-Flagge verwendet, aber das machte keinen Unterschied. Irgendwelche Ideen, wie ich den Kunden dazu bringen kann, grunzen zu finden?

    
ChrisCast 09.07.2013, 01:17
quelle

5 Antworten

20

GUI apps unter OS X laden die Sachen nicht in .bashrc / .bash_profile, was bedeutet, dass sie keine benutzerdefinierten $ PATH-Zusätze wie /usr/local/bin haben, wo sich die grunt-Binärdatei befindet. Sie können entweder den vollständigen Pfad angeben oder den $ PATH in Ihrem Pre-Commit-Hook fixieren, indem Sie diesen nach den Top-Kommentaren hinzufügen: PATH="/usr/local/bin:$PATH"

    
Sindre Sorhus 09.07.2013, 20:25
quelle
6

Wenn Sie Quellcode (auf Mac) verwenden und Pre-Commit- und Pre-Push-Hooks haben, öffnen Sie SourceTree mit der Befehlszeile, anstatt sie direkt mit dem folgenden Befehl zu öffnen.

%Vor%

Jetzt werden deine Hooks funktionieren, wenn du versuchst Commit und Push zu machen. Ich bin mir sicher, dass es auch für die github App funktioniert.

    
Aamir Afridi 07.11.2015 22:01
quelle
1

Wenn Sie ein Skript ausführen möchten, das Ihre Umgebung abruft ( $PATH , etc), sollten Sie die erste Zeile Ihres Skripts ändern:

%Vor%

zu:

%Vor%

Rufen Sie dann grunt ohne den fest codierten Pfad auf.

Wenn sich der Pfad zu Ihrer ausführbaren Datei in der Zukunft ändert oder auf anderen Computern anders ist, funktioniert das Skript weiterhin. /usr/bin/env ruft die Umgebung des Benutzers ab, in dem das Skript ausgeführt wird. Dies ist sehr hilfreich an Orten, wo einige Leute verschiedene Paketmanager verwenden, aber dieselben Skripte ausführen müssen. Andernfalls könnten Sie mit einer Menge Logik auf der Suche nach Anwendungen sein, die vermieden werden könnten, indem Sie von einem korrekt bevölkerten $PATH abhängen.

    
Tim Mattison 13.08.2014 11:59
quelle
0

Sindre Sorhus 'ausgezeichnete Antwort:

  

GUI apps unter OS X lädt die Sachen nicht in .bashrc / .bash_profile,   was bedeutet, dass sie keine benutzerdefinierten $ PATH-Zusätze wie    /usr/local/bin , wo sich die grunt-Binärdatei befindet. Du kannst entweder   Geben Sie den vollständigen Pfad an oder fixieren Sie $ PATH in Ihrem Pre-Commit-Hook, indem Sie   Hinzufügen nach den Top-Kommentaren: PATH="/usr/local/bin:$PATH"

In meinem Fall funktionierte das nicht, weil ich Node Version Manager verwende, der verschiedene Versionen von Node speichert und es einfach macht um Knotenversionen zu aktualisieren und zu wechseln. Es speichert Ihre Knotenmodule für jede Knotenversion in einer separaten Datei. Hier ist der Code, mit dem ich dieses Problem umgehen konnte:

%Vor%

Dies prüft auf NVM und lädt, falls vorhanden, den Pfad zu den Knotenmodulen für die aktuell verwendete Version von Node.

    
RustyToms 12.04.2017 13:58
quelle
-1

als einfache Problemumgehung, die den vollständigen absoluten Pfad zu grunt angibt, sollte funktionieren. Wenn Sie mehr Umgebung für die Einrichtung benötigen, müssen Sie untersuchen, wie die github-Anwendung die Umgebung für die Hooks erstellt.

    
mnagel 09.07.2013 07:04
quelle