2012-03-28 10 views
9

Ich habe das folgende Problem. Ich habe die ‚Post-empfangen‘ auf CD in einem bestimmten Verzeichnis aktualisiert und dann die repo ziehen darin einzusetzen, wie so:git post-receive funktioniert nicht richtig

#!/bin/bash 
cd /var/www/site 
git pull origin master 

Allerdings, wenn ich ‚git push origin master‘ tun auf meinem lokalen Rechner erhalte ich die folgenden:

Counting objects: 5, done. 
Delta compression using up to 2 threads. 
(etc..) 
remote: fatal: Not a git repository: '.' 

Doch wenn ich manuell cd zu /var/www/site und git pull origin master tun es funktioniert hervorragend.

Antwort

14

Verwenden ungesetzt GIT_DIR folgend

#!/bin/bash 
cd /var/www/site || exit 
unset GIT_DIR 
git pull origin master 
exec git-update-server-info 

Sie können mehr Informationen über GIT_DIR hier sehen. Git Loves the Environment

+0

Brilliant, genau das, was ich brauchte. Stört es Sie zu erklären, warum dies getan werden muss? – andy

+2

'GIT_DIR' ist eine der wenigen Umgebungsvariablen, die Sie für verschiedene Git-Befehle festlegen können. In einem Post-Receive-Hook ist '$ GIT_DIR' immer (?) Auf' .' gesetzt. Wenn Sie an anderer Stelle "cd" wählen, sieht 'git pull' immer noch' $ GIT_DIR' auf '.' gesetzt und erwartet, dass Sie den Repo in' .' finden, aber Sie sind umgezogen und es ist nicht da. Wenn du es ausräumst, kehrt git zu seinem "normalen" Verhalten zurück (schaue in './. Git ', an dem Ort, an den du' cd'-edst). – torek

2

Eine weitere Option ist das Erwähnen des Arbeitsverzeichnisses und des Git-Verzeichnisses im Befehl.

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command> 

z:

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status