Git, wie genau funktioniert push?

And1.G

Lieutenant
Dabei seit
Nov. 2006
Beiträge
688
Hallo!

Da ich häufig mal mit Notebook (Arch Linux) und mal mit PC (Ebenfalls Arch Linux) programmiere, dachte ich mir, ich setze mir auf meinem Raspberry Pi einen gitosis-Server auf. Dazu habe ich unter Arch Linux ARM das gitosis-git Paket aus dem AUR installiert.

Mit "gitosis-init < andreas@andilaptop.pub" habe ich dann gitosis initialisiert und mit dem Befehl wurde das gitosis-admin Repo in "/srv/gitosis/repositories/gitosis-admin.git" erstellt.

Am Notebook habe ich das ganze dann mit dem folgenden Befehl in mein lokales Dateisystem geklont:
Code:
git clone git@raspberrypi.fritz.box:gitosis-admin.git
Dann gitosis.conf um den letzten Abschnitt hier erweitert:
Code:
[gitosis]

[group gitosis-admin]
members = andreas@andilaptop
writable = gitosis-admin

[group andreas]
members = andreas@andilaptop
writable = test
In die neue Gruppe "andreas" werde ich dann zusätzlich zum Notebook noch den PC einfügen.

Änderung committen, push:
Code:
git commit -am "Created group andreas for future purposes"
git push
Am Notebook erscheint nun das hier, sieht also ganz gut aus finde ich:
Code:
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 382 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@raspberrypi.fritz.box:gitosis-admin.git
   8a1707d..70fcf92  master -> master
Wenn ich mich nun mit dem git-Account am Raspberry Pi anmelde und "cat /srv/gitosis/repositories/gitosis-admin.git/gitosis.conf" ausführe ist die Datei immer noch die alte Version auf dem Stand vor der Änderung. "git show" auf dem Raspberry Pi gibt folgendes aus:
Code:
commit 70fcf92669924146cf527b34d6c87cad2aa5aaee
Author: Andreas xxx <xxx>
Date:   Tue Aug 20 19:58:44 2013 +0200

    Created group andreas for future purposes

diff --git a/gitosis.conf b/gitosis.conf
index 247120f..8e9b588 100644
--- a/gitosis.conf
+++ b/gitosis.conf
@@ -4,3 +4,6 @@
 members = andreas@andilaptop
 writable = gitosis-admin
 
+[group andreas]
+members = andreas@andilaptop
+writable = test
Wenn ich jetzt das gitosis-admin repo in einen anderen Ordner auf dem Notebook klone, bekomme ich dort im lokalen Dateisystem eine gitosis.conf mit dem richtigen, neuen Inhalt. Nach einem pull im ersten lokalen Repo erscheint eine Änderung aus dem zweiten auch dort.
Da gitosis sich seine Konfiguration allerdings aus genau dem remote Repo direkt aus dem Dateisystem holt und die Datei auf dem Server noch die selbe ist, bekommt die Software die Änderung der Berechtigungen allerdings nicht mit...

Es sieht ja so aus, als wäre der commit angekommen. Aber wieso erscheint er nach einem push nicht so im Dateisystem? Oder verstehe ich da das git-System grundlegend falsch?
 

schattenhueter

Lieutenant
Dabei seit
Feb. 2006
Beiträge
767
Hi And1.G,

das Problem wird sehr wahrscheinlich sein, dass du das Arbeitsverzeichnis auf deinem Pi aktualisieren musst. Es gibt nämlich eine klare Trennung zwischen Repository und Arbeitsverzeichnis. Im Repository sind schon die Änderungen vorhanden, aber die Dateien im Arbeitsverzeichnis werden nicht auch geändert. Du musst entsprechend im Arbeitsverzeichnis zur neusten Version des Repositories wechseln.
Mich wundert etwas die Art wie du gitosis konfigurieren willst. Ist es wirklich so vorgesehen, dass man per push Änderungen vornehmen soll?
 

Blackbenji

Lieutenant
Dabei seit
Nov. 2009
Beiträge
553
ich arbeite selber erst seit 2 tagen mit git, meine erste erfahrung die ich aber gemacht habe: vor jedem commit & push, erstmal ein pull ...
 

And1.G

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2006
Beiträge
688
Das mit dem Arbeitsverzeichnis aud dem Pi hab ich mir irgendwie so gedacht. Mittlerweile hab ich gesehen, dass gitosis wohl nich tmehr weiterentwickelt wird. Daher hab ich es mal mit gitolite versucht. Wieder gleiches Spiel, mit clone die Konfiguration holen, ändern, add, commit, push. Änderungen kommen auf dem Server an, werden aber nicht übernommen.

Mich wundert etwas die Art wie du gitosis konfigurieren willst. Ist es wirklich so vorgesehen, dass man per push Änderungen vornehmen soll?
Ja! Siehe beispielsweise hier: https://wiki.archlinux.org/index.php/Gitosis#Configuration
Bei gitolite funktioniert das analog: https://wiki.archlinux.org/index.php/Gitolite

Bei letzterem heißt es sogar ausdrücklich
Do NOT add repos or users directly on the server! You MUST manage the server by cloning the special 'gitolite-admin' repo on your workstation:
Also irgendwie muss das doch gehen :confused_alt:
Danke schonmal für eure Bemühungen!

Auch ein pull hat zumindest jetzt nachträgtlich nichts geholfen (already up-to-date)...
 

stwe

Lieutenant
Dabei seit
Feb. 2011
Beiträge
654
Meine Vermutung ist, dass das Repository dass du klonst ein Bare-Repository ist, während das Repository unter "/srv/gitosis/repositories/gitosis-admin.git" ebenfalls ein Klon dieses Repositories ist.

Es ist in git nämlich nicht möglich in den aktiven Branch eines Repositories zu pushen. Wenn du also den Push ausführst, dann wandern die Änderungen in das Bare-Repository. Wenn du dieses Repository dann klonst, hast du natürlich die aktuellen Änderungen.
Im "/srv/gitosis/repositories/gitosis-admin.git"-Verzeichnis kommen diese Änderungen aber natürlich nicht an. Dazu ist erst ein Pull nötig.

Im gitolite-Manual habe ich auch öfters gesehen, dass man "gitolite push" ausführen soll. Vllt. führt das den Pull durch. Ich finde es aber auch verwunderlich, dass in der Arch-Wiki ein einfacher "push" drinsteht..
 

And1.G

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2006
Beiträge
688
Also sämtliche Anleitungen, die ich bisher gesehen haben, laufen auf ein git {add,commit,push} hinaus.

http://wiki.dreamhost.com/Gitolite
http://wiki.wiba10.de/software:gitolite
Nur um mal zwei Beispiele zu nennen.

Woher hast du das mit "gitolab push"? Das lese ich immer nur im Zusammenhang mit der Migration von einer alten Version zur aktuellen von gitolab.
Habe aber auch mal auf dem Notebook gitolab installiert und im gitolab-admin Ordner den Befehl ausgeführt. Die Sachen wurden auf den Server übertragen, aber wieder keine Reaktion auf den neu hinzugefügten Public Key oder das neu angelegte Repo.
Es kann doch nicht sein, dass irgendwie sämtliche Anleitungen fehlerhaft sind...
 
Top