Git - hook post-ricezione con git pull "Impossibile trovare una directory git valida"


17

È molto strano ma quando si imposta un repository git e si crea un hook post-ricezione con:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

l'hook funziona davvero, ma non riesce mai a eseguire git pull correttamente:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

quindi mi chiedo ora, come è possibile fare in modo che l'hook aggiorni il clone con post-ricezione?

in questo caso l'utente che esegue i processi è lo stesso, ed è tutto all'interno della cartella dell'utente, quindi non capisco davvero ... perché se andassi manualmente in

cd ~/websites/testing
git pull

funziona senza problemi ...

qualsiasi aiuto su questo sarebbe molto apprezzato

molte grazie

Risposte:


25

Mentre l'hook è in esecuzione GIT_DIRe (se il worktree è stato definito in modo esplicito) GIT_WORK_TREEsono impostati. Ciò significa che il pull non verrà eseguito con il secondo repository nella directory in cui è stato modificato.

Provare git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; o disattiva l'ambiente repo-local di git con questo:

unset $(git rev-parse --local-env-vars)

Maggiori informazioni su queste variabili d'ambiente in man 1 git .


1
Grazie mille per questo Tobu, funziona davvero, io controllare di più informazioni su di esso troppo. Cin cin
zanona

6

Una cosa che ho sperimentato è che l'uso post-updatedell'hook '--git-dir' ha funzionato alla grande ma Git si stava ancora lamentando di un albero di lavoro mancante (nonostante si usasse '--work-tree')

In breve, questo non ha funzionato:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

mentre questo ha funzionato:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

Non funziona?

cd /home/smb/websites/testing
env -i git pull

Modificato

Meglio ancora

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

Hai provato con il percorso completo invece di ~?

cd /home/smb/websites/testing
git pull

0

Lo script è probabilmente invocato con /bin/sh, il che non capisce ~. Provalo invece con il percorso completo ~.


0

La prima risposta consigliata è corretta: quando viene impostato un hook GIT_DIR ecc. Tuttavia, se si desidera essere in grado di utilizzare lo script in un altro repository, quel metodo è imperfetto perché codifica hard reset del GIT_DIR. Come hanno implicato, l'altro modo è rimuovere la variabile usando env come segue: env -i git reset --hard Ovviamente quale comando si esegue lì dipende da te - è solo il bit 'env -i' che è il bit importante .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.