2011-11-19 9 views
6

Provo a configurare il mio hook di post-ricezione su git (windows). Ecco lo script:post-receive hook su Windows - GIT_WORK_DIR: nessun file o directory

#!/bin/sh 
echo "post-receive hook" 
GIT_WORK_TREE=/d/test git checkout -f 

Quando faccio git push sul mio repository locale vedo questo messaggio eco, lo script si chiama correttamente.

Ma il checkout non funziona! C'è un errore nella vista della console:

remote: fatal: Could not switch to '/d': No such file or directory 

Ma quando inserisco questo comando in Git Bash, funziona!

+1

Stai usando cygwin invece della bash inclusa con msysgit? Perché con cygwin, il percorso sarebbe '/ cygdrive/d/test'. – VonC

+0

No, ho installato Git solo con Git Bash - senza aggiungere git a PATH. Forse dovrei provare ad aggiungere git a PATH? – RobertM

+0

Non penso che il 'PATH' sia il problema (puoi' echo' il '$ PATH' per verificare). Forse prova anche a impostare 'GIT_DIR'. Mostra anche il 'pwd' e un' ls/d'. – VonC

risposta

2

Dai commenti:

GIT_WORK_TREE=/Volumes/D/test git checkout -f 

opere.

Tuttavia, i commenti OP RobertM:

Che cosa succede se mi spingerà da un altro computer? Ho altro clone sulla mia macchina Windows su cui questo percorso non è disponibile

Questa è una questione diversa, e può essere risolvere, per esempio con un drive convenzione di denominazione: si può decidere di associare qualsiasi percorso repo remoto è (d:\test o qualsiasi altro percorso) a una lettera di unità specifica (X: per esempio), con Windows subst command.

0

devo mysysgit in esecuzione su un server web che mi spingono a dalla mia stazione di lavoro locale e io uso il seguente post-ricezione script:

#!/bin/sh 
git --work-tree=/cygdrive/d/www --git-dir=/cygdrive/d/CodeRepositories/tempRepo.git checkout -f 

Quello che mi ha messo in difficoltà all'inizio era il file non essere in un UNIX formato, puoi usare Notepad ++ per cambiarlo. Nota, sto usando cygwin per eseguire il push su SSH, quindi potrebbe essere necessario modificare i nomi delle directory.