2013-08-16 16 views
10

Ho problemi durante l'esecuzione di hook Git su Windows. Ho un repo nuda e nella sua "ganci" cartella ho messo il seguente sia nel "aggiornamento" e file "pre-push", ma lo script PHP è non essere mai eseguito:Esecuzione di hook Git su Windows

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

Tutte le idee sul perché lo script PHP non viene eseguito?

Nella finestra della console Git vedo il seguente quando provo a spingere qualcosa al repo nuda:

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' 

... quindi so che il "aggiornamento" è in qualche modo in esecuzione. Quando rimuovo quel file, la spinta funziona bene.

+0

Quando rinominare il file hook in un file .bat ed eseguirlo, tutto funziona perfettamente! – TheStoryCoder

+0

A quale file ti riferisci quando dici di "rinominare un file"? I tuoi hook sono implementati come script di bash, php o batch? Possiamo vedere i contenuti? –

risposta

13

Per impostazione predefinita, Git per Windows esegue script di hook utilizzando la propria porta Windows della shell bash. Certamente, una shell Unix non ha idea di %1. Presumibilmente, Git per Windows ha degli hack aggiuntivi in ​​grado di rilevare le estensioni "comuni" dei nomi di file — come .bat — e prendere un percorso alternativo in tal caso.

penso che il fix per il proprio programma è la migliore, ma un altro approccio sarebbe quello di riscrivere lo script di leggere

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

(la linea shebang non ha un vero senso speciale sotto Windows diverso accennando alla prossima persona per modificare lo script sul significato del suo contenuto).

+5

'c: /' dovrebbe essere probabilmente '/ c /' invece. –

+0

Fantastico - hai reso la mia giornata! – TheStoryCoder

+0

Argh, funziona solo su 'pre-commit'. Su 'pre-receive' e 'update' dice solo quanto segue, non importa quello che scrivo: PACK git-receive-pack (449 byte) A https: // username @ mydomain/samplerepo ! [remoto rifiutato] master -> master (gancio di pre-ricezione rifiutato) errore: impossibile inviare alcuni riferimenti a "https: // username @ mydomain/samplerepo" – TheStoryCoder