web-dev-qa-db-ger.com

msysgit Fehler mit Hooks: "git Fehler: .git/hooks/post-commit kann nicht erzeugt werden: Keine solche Datei oder Verzeichnis

Ich habe Probleme, Hooks nach dem Empfang und nach dem Festschreiben zu erhalten, damit sie korrekt mit msysgit (Windows 7 Pro/32 und Ultimate/64) funktionieren. Beim Post-Commit-Hook erhalte ich den obigen Fehler, wenn ich entweder von git-bash oder von der Konsole aus einchecke, aber es funktioniert gut, wenn ich mich durch git-gui verpflichte. Bei einem Post-Receive-Hook geben alle drei den gleichen Fehler aus. 

Ich denke, das ist eine Art Erlaubnis oder Pfadfehler, aber ich habe keine Ahnung, wo man hier anfangen soll.

40
Matt

Fügen Sie den Shebang wie folgt der ersten Hakenreihe hinzu:

#!/bin/sh
echo "executing post-commit"
exit 0

Dies hatte mich auch für eine Weile verblüfft und ich sah, dass das Hinzufügen des Shebang es reparierte. In der SVN-Welt haben wir in * nix ein "Pre-Commit" -Skript, und in Windows hatten wir "Pre-Commit.bat" und SVN nahm die Bat-Datei automatisch in Windows auf. Git scheint keine pre-commit.bat (oder einen anderen Hook) aufzuheben und den Shebang zur Hook-Datei hinzuzufügen.

73
manojlds

Wenn Sie den Shebang haben und der Fehler weiterhin besteht, stellen Sie sicher, dass Sie <path_to_git>\bin in Ihrer Pfadumgebungsvariablen festgelegt haben.

Wahrscheinlich haben Sie auch <path_to_git>\cmd, wenn Sie es von der Befehlszeile aus installiert haben.

5
Nick Robson

Ich verwende SourceTree und git LFS und hatte ein ähnliches Problem: cannot spawn .git/hooks/pre-Push.

Das Update bestand darin, die pre-Push-Datei zu löschen (Öffnen ergab, dass sie stark beschädigt war) und SourceTree neu zu starten. An diesem Punkt wird die pre-Push-Datei neu erstellt und alles ist wieder normal.

5
Jarrod Smith

Wenn jemand, wie ich, auf ein ähnliches Problem beim Zugriff auf Git-Repositorys über Apache stößt, sollten Sie den Pfad in der Apache-Konfiguration festlegen.

SetEnv PATH "c:/Program Files (x86)/Git/bin;"
2
Xmister

Dies ist eine alte Frage, aber ich habe mit diesem genauen Problem gekämpft, und diese SO - Frage tauchte auf, also hielt ich es für lohnend, aufzuzeichnen, was für mich funktionierte.

Kurz gesagt: Ich musste Apache als regulären Benutzer anstelle von Local System ausführen. Dies war ein alter Test mit VM, mit dem ich gespielt habe, also wurde nur Windows XP ausgeführt, aber zumindest auf dieser Plattform (und möglicherweise auch anderen) scheint msysgit nicht richtig zu funktionieren, wenn sie unter dem Local System-Konto ausgeführt wird (vermutlich der root filesystem ist nicht richtig zugeordnet. Als Ergebnis funktioniert keine Shebang-Zeile, da git-http-backend einfach keine msysgit-Binärdateien ausführen kann (selbst mit absoluten Windows-Pfaden).

Durch das Umschalten von Apache auf ein normales Benutzerkonto wurde dieses Problem vollständig behoben. Natürlich müssen Sie sicherstellen, dass der Benutzer Apache ausgeführt wird, da er über Berechtigungen für read/write der git-Repositorys verfügt. Darüber hinaus müssen Sie jedoch sicherstellen, dass Ihre Shebang-Zeile #!/bin/sh ist und alles passiv sein sollte.

Zum Schluss ist es ein großer Hammer. Idealerweise könnten Sie etwas wie suexec für Windows verwenden, aber eine schnelle googling zeigt keinen offensichtlichen Weg nach vorne an. Wenn jemand Ideen hat, wäre ich natürlich interessiert.

Im Moment funktioniert das für mich, aber es scheint nicht ideal zu sein.

2
user1630539

Durch das Entfernen einer Kommentarzeile vor der Shebang-Linie wurde der Fehler behoben. Seltsamerweise lief das Skript einwandfrei von der Shell aus, wurde jedoch als Hook ausgeführt.

0
T Corman

Mit Tortoisegit und LFS mussten die Dateien im Ordner .git/hooks entfernt werden. 

0
Justin Hirsch