2013-12-16 13 views
27

Sto appena iniziando a esaminare gli hook di Git, ma non riesco a farli funzionare.Git pre-commit hook non in esecuzione su Windows

Ho impostato un repository locale, quindi ora c'è una directory ".git" nella cartella del mio progetto. Ho aggiunto un file ".cmd" nella directory C: /path/to/my/project/.git/hooks denominata "pre-commit.cmd". Ecco i contenuti di questo file:

echo "HOOK RUNNING" 
echo. 2>C:/path/to/my/project/.git/hooks/EmptyFile.txt 

Questo dovrebbe eco il testo "HOOK RUNNING" e creare un file di testo vuoto in quella directory. Tuttavia, se applico modifiche tramite IDE (NetBeans) o utilizzo Git Bash per il commit, nessuno di essi sembra eseguire il mio hook pre-commit, poiché non viene creato alcun file.

La mia comprensione è che tutto ciò che si deve fare per ottenere un hook da eseguire è aggiungere un eseguibile con il nome del gancio (come ho fatto io). Sto facendo qualcosa di sbagliato?

Nota: questo è su un PC Windows 7.

risposta

38

E il naming del proprio hook pre-commit (senza alcuna estensione)?

EDIT: e aggiungere #!/bin/sh sulla prima riga o #!/bin/bash (suggerito nei commenti)

+0

Grazie per le sugge zione. L'ho provato e ora viene visualizzato un errore quando provo a eseguire il commit: "errore: impossibile generare .git/hooks/pre-commit: nessun file o directory". – user1578653

+1

modificato per aggiungere un secondo suggerimento (disponibile in http://stackoverflow.com/questions/5697210/msysgit-error-with-hooks-git-error-cannot-spawn-git-hooks-post-commit-no-su) . se questo non è quello, non posso aiutare di più, non ho molta familiarità con il problema della shell di windows – Asenar

+0

Ecco fatto! Il secondo suggerimento l'ha fatto funzionare. Non sei sicuro del motivo per cui non può essere solo un normale file Windows '.bat' o '.cmd' ... – user1578653

31

Probabilmente non hanno le autorizzazioni per eseguire il file pre-commit

Esegui nel terminale:

chmod +x .git/hooks/pre-commit 

Grazie a @vaughan per dare l'idea

+0

anche un motivo valido per il motivo per cui un hook non viene eseguito: D, vero nel mio caso, grazie a –

+0

Questo mi ha fatto impazzire e ha corretto il mio problema. Grazie! – skeller88

+0

@DaneMacaulay Puoi dirmi per favore dove scrivere questo? – user2125722