2012-07-24 9 views
23

ottengo l'errore:Git - a distanza: errore: non è possibile eseguire ganci/post-ricezione: No such file or directory

remote: error: cannot run hooks/post-receive: No such file or directory 

Quando si cerca di spingere a distanza. Il file di post-receivce esiste nella posizione corretta (testnew.git/ganci) e contiene:

#!/bin/bash2 
export GIT_DIR=/var/www/testnew/testnew/.git/ 
export GIT_WORK_TREE=/var/www/testnew/testnew/ 
cd /var/www/testnew/testnew/ 

echo "here we go..." 
git fetch 
git merge origin/master 
git submodule update --init --recursive 

ho provato l'impostazione delle autorizzazioni sul post-ricezione utilizzando:

chmod a+x post-receive 

Ma questo dà stesso errore. Impostazione autorizzazione per 755 rimuove l'errore, ma lo script non viene eseguito.

+1

cosa succede quando si esegue direttamente da shell hook/post-receive? La mia ipotesi è che/bin/bash2 non esiste, almeno non è un abituale interprete,/bin/bash dovrebbe essere sufficiente – jolivier

risposta

27

Ciò accadrebbe se il file hooks/post-receive esiste, è contrassegnato come eseguibile, ma non può essere eseguito. Non può essere eseguito, perché l'interprete, /bin/bash2, non esiste o non è eseguibile.

Sostituire /bin/bash2 con il nome di bash che esiste ed è eseguibile sul server.

(Il motivo per cui l'errore è simile a questo è che il sistema operativo restituisce solo lo stato di errore "Nessun file o directory", ma non segnala quale file non esiste. E il codice che ha provato ad eseguirlo non sa che il sistema ha già letto hooks/post-receive e stava cercando /bin/bash2. Tutto ciò che sa è che ha provato a eseguire hooks/post-receive, quindi è quello che stampa).

+0

Questo era il problema. Passare a/bin/bash ha funzionato correttamente. Grazie. – BobFlemming

7

Inoltre (per riferimento futuro e la documentazione su questa questione) se si dovesse eseguire echo $SHELL nella shell si dovrebbe vedere un risultato atteso, in questo caso (in base alla risposta approvato) che ci si aspetta /bin/bash come risultato. Ma un altro possibile problema può essere un ritorno a capo non visto.

Prova esecuzione hooks/post-receive se hai ancora problemi, è possibile ottenere una risposta come questa:

-bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory 

La chiave qui è la ^M che è prova che sei in realtà ottenere un ritorno a capo inaspettato, altrimenti se avesse funzionato probabilmente avresti una risposta sospesa.

Risolto il problema e dovrebbe risolvere il problema. Il modo per farlo, usare dos2unix, ad esempio:

dos2unix .htaccess 
+2

Aggiungendo a questa risposta, se si utilizza il Testo sublime, è possibile visualizzare Visualizza -> Terminazioni linea -> Unix. Seleziona Unix e quindi salva di nuovo il file. – kloddant

+0

In aggiunta a questa risposta, usare 'find ./ -type f -exec dos2unix {} \;' per convertire i line-endlings per tutti i file in una directory corrente. – naXa

0

È stato causato da me dimenticando di fare git init prima.

Problemi correlati