2013-08-16 14 views
10

Ich habe Probleme beim Ausführen von Git-Hooks unter Windows. Ich habe einen nackten Repo und in seinem „Haken“ Ordner habe ich die folgend beide in der „update“ und „pre-push“ Dateien aber der PHP-Skript wird nie ausgeführt wird:Ausführen von Git-Hooks unter Windows

"c:/Programs/PHP/php.exe" c:/Data/Scripts/git-pre-push.phpcli %1 

Irgendwelche Ideen, warum Das PHP-Skript wird nicht ausgeführt?

Im Git Konsolenfenster ich folgendes zu sehen, wenn ich versuche, etwas zu dem nackten Repo zu schieben:

POST git-receive-pack (437 bytes) 
remote: error: hook declined to update refs/heads/master 
To https://[email protected]/samplerepo 
! [remote rejected] master -> master (hook declined) 
error: failed to push some refs to 'https://[email protected]/samplerepo' 

... so weiß ich, dass die „update“ irgendwie ausgeführt wird. Wenn ich diese Datei entferne, funktioniert der Push einwandfrei.

+0

Wenn ich die Hook-Datei in eine .bat-Datei umbenennen und ausführen, funktioniert alles gut! – TheStoryCoder

+0

Auf welche Datei beziehen Sie sich, wenn Sie sagen, dass Sie "eine Datei umbenannt" haben? Sind Ihre Hooks als Bash-, PHP- oder Batch-Skripte implementiert? Können wir den Inhalt sehen? –

Antwort

13

Standardmäßig führt Git für Windows Hook-Skripte mit dem eigenen Windows-Port der Shell bash aus. Sicherlich hat eine Unix-Shell keine Ahnung von %1. Angeblich hat Git für Windows zusätzliche Hacks zur Erkennung von "normalen" Dateinamenerweiterungen — wie .bat — und nehmen Sie eine alternative Route in einem solchen Fall.

denke ich, Ihre Verlegenheit zu Ihrem eigenen Programm ist die beste, aber ein anderer Ansatz wäre, die Skript zu umschreiben

#!/bin/sh 
c:/Programs/PHP/php.exe c:/Data/Scripts/git-pre-push.phpcli "[email protected]" 

(die Shebang-Zeile zu lesen, hat keinen wirklichen besonderen Sinn unter Windows anders als die nächsten Hinting Person, um das Skript über die Bedeutung seines Inhalts zu bearbeiten).

+5

'c: /' sollte wahrscheinlich '/ c /' stattdessen sein. –

+0

Super - du hast meinen Tag gemacht! – TheStoryCoder

+0

Argh, es funktioniert nur auf 'Pre-Commit'. Auf 'pre-receive' und 'update' sagt es einfach Folgendes, egal was ich schreibe: POST git-receive-pack (449 bytes) Um https: // username @ mydomain/samperepo ! [remote rejected] master -> master (pre-receive hook abgelehnt) error: konnte einige Refs nicht auf 'https: // username @ mydomain/samperepo' schieben – TheStoryCoder

Verwandte Themen