[gelöst] Zentrales Git Repository (mit post-receive)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
exxecc
Beiträge: 30
Registriert: 24.07.2010 12:32:29
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] Zentrales Git Repository (mit post-receive)

Beitrag von exxecc » 15.09.2012 09:51:00

Hallo zusammen

Folgendes Tutorial hab ich mir zur Brust genommen: http://kunfoo.org/ein-zentrales-git-rep ... inrichten/
Einfach, schnell tut das was es soll. Git ist also eingerichtet und funktioniert.

Ich habe nun das Master branch sowie ein dummy branch. auf dem Remote Server ist das dummy branch aktiv - damit ich via Netbeans auf das geklonte mastebranch pushen kann.

Jetzt würde ich gerne (wie ich es von SVN gewohnt bin), via post-hooks meine gepushten Daten direkt auf dem Webserver veröfffentlichen.
Dazu hab ich mich schlau gemacht wird bei git der hook post-receive genutzt.

Da also dann folgendes eingefügt:
GIT_WORK_TREE=/var/www/ git checkout -f

Das funktioniert auch soweit, nur leider checkt er bei mir den "dummy" branch aus, welcher auf dem remote repository active ist.
Sobald ich versuche den master branch zu aktivieren und via Netbeans zu pushen bekomme ich ein Fehler (da ich den aktiven branch nicht remote pushen darf).

Meine Frage nun also: Wie kann ich im Post-receive hook den aktuell gepushten branch in mein www Verzeichniss auschecken?
Oder: gibt es eine Möglichkeit diesen "dummy"-branch zu umgehen, so dass git nicht meckert wenn der lokal aktive branch gepusht wird?

Viele Grüße
exxecc
Zuletzt geändert von exxecc am 16.09.2012 23:56:40, insgesamt 1-mal geändert.

exxecc
Beiträge: 30
Registriert: 24.07.2010 12:32:29
Lizenz eigener Beiträge: MIT Lizenz

Re: Zentrales Git Repository [branch bei post-receive kopier

Beitrag von exxecc » 16.09.2012 23:55:56

Ich hab mittlerweile eine Lösung gefunden, die auch das DummyBranch nicht mehr benötigt:
"git config receive.denycurrentbranch ignore"
Somit ist ein pushen des master branches kein thema mehr - und im post-receive wird (via: "GIT_WORK_TREE=/var/www git checkout -f") korrekt in das gewünschte www folder ausgecheckt.

Leider scheint es via Netbeans nicht möglich zu sein auf ein beliebiges branch auf dem Server remote zu wechseln.
Es bleibt somit immer das master branch active, und nur dieses wird in das www verzeichniss ausgecheckt.

edit: hier dann nochmal ein mini tut für die leute die evtl. interesse daran haben

Die pfade/benutzer und gruppennamen sind natürlich jedem selbst überlassen.. ich lege jetzt der übersicht halber die neue gruppe "gitusers" fest

//git installieren
//sudo installieren (danach "visudo" zum einrichten von commit via sudo):
%gitusers ALL=(ALL)NOPASSWD: /usr/bin/git

addgroup gitusers // oder wie auch immer die gruppe heißen soll
nano /etc/group // füge der gruppe "gitusers" den nutzer "www-data" hinzu (für auscheckrechte)
useradd -s /usr/bin/git-shell -g gitusers -d /var/git/{projectname} {neuer_ssh_git_shell_username}
passwd {neuer_ssh_git_shell_username}

// repository directory erstellen zB @ /var/git/{projectname}
mkdir /var/git/{projectname}
// initiale dateien des projectes einfügen + in den ordner wechseln
git init --shared=true // true == alle können pushen/zugreifen 0660 == nur gruppenmember können pushen/zugreifen (siehe http://git-scm.com/docs/git-config für mehr)
git config receive.denycurrentbranch ignore // brauchen wir, weil der aktive master branch gepushd wird
// es muss mindestens eine datei vorhanden sein
git add * // hinzufügen der files zum repo
git commit -f // erstes auschecken

// in /var/git/{projectname}/.git/hooks wechseln
nano post-receive // darin folgendes einfügen:

Code: Alles auswählen

#!/bin/sh
sudo -S -u www-data git --git-dir=/var/git/{projectname}/.git --work-tree=/var/www/vhosts/{projectname}/httpdocs checkout -f
// in /var/git/{projectname} wechseln
chown {neuer_ssh_git_shell_username}:gitusers . -R // setzen der rechte

Damit wars dass auch soweit. Nun kann man bequem via Netbeans initial clonen und wie gewünscht pushen - so dass alle datein im www landen.

Viele Grüße
exxecc

Antworten