Mein erstes Git Repository auf dem Server war schnell erstellt:sudo mkdir -p /var/git/netzpiraten.gitcd /var/git/netzpiraten.gitgit –bare init –shared=group… und schon konnte ich loslegen …
git clone ssh://www.netzpiraten.ch/var/git/netzpiraten.gitcd netzpiratentouch testgit add testgit commit -a -m "Adding first file"git push origin master
… und hatte wirklich nie irgend welche Probleme mit dem zentralen Repository auf dem Server.Ein paar Monate später wurden auch in der Firma alle Subversion Repositories auf Git umgestellt und das lief auch ein Weilchen ohne Probleme, bis eines Tages folgende Fehlermeldung aufgetreten ist:
Counting objects: 31, done.Compressing objects: 100% (20/20), done.Writing objects: 100% (22/22), 239.64 KiB, done.Total 22 (delta 7), reused 0 (delta 0)error: unable to write sha1 filename ./objects/1c/1d505f3a585b9e7d298eb9477ab07c5ea79aea: Permission deniedfatal: failed to write objecterror: unpack failed: unpacker exited with error codeTo ssh://git.screenconcept.ch/var/git/repository.git ! [remote rejected] master -> master (n/a (unpacker error))
Also nichts wie auf den Server um das Repository etwas genauer zu inspizieren.Zum Glück konnte der Fehler schnell gefunden werden: Ich hatte vergessen auf den Git Repositories das Setgid Flag zu setzten, womit neue Dateien nicht der Git Gruppe gehörten sondern der Hauptgruppe des Benutzers. Klar das eine anderer Benutzer diese nun nicht einfach so überschreiben kann.Also schnell den Missstand korrigieren:
sudo chown -R :git /var/git
sudo find /var/git -type d | xargs chmod ug+rwx,g+s
… und jetzt kann wieder gemeinsam gearbeitet werden.
Man merke sich also folgendes für das Erstellen eines zentralen Git Repository:
- Git Repository Verzeichnis erstellen
- Das Verzeichnis der Gruppe ‘git’ zuweisen
- Auf dem Verzeichnis das Setgid Flag setzten
- Git Repository initialisieren
oder anders formuliert
sudo mkdir /var/git/repository.git
sudo chown :git /var/git/repository.git
sudo chmod ug+rwx,g+s /var/git/repository.git
sudo git init --bare /var/git/repository.git
… und nicht vergessen, Git macht am meisten Spass, wenn man auf GitHub teilt.

(1 Benutzer, durchschnittlich 4 Goldstücke)















Nach meiner Erfahrung braucht es noch einen Schritt mehr. Remote-Zugriffe erstellen neue Files mit der falschen umask (d.h. nicht schreibbar von anderen Gruppenmitgliedern).
Die Lösung ist ein /etc/gitconfig mit folgendem Inhalt:
[core]
sharedRepository = group
Das hat damals mein Problem gelöst.
Danke für den Hinweis, das werde ich gleich ausprobieren!
Hi,
ich nutze dein Ruby Mailconv script.
Leider läuft das in einen “memory allocation” Fehler.
Mein logfile ist “etwas” größer.
Kann man das irgendie beheben ?
Habe keine andere Möglichkeit gefunden Dich zu kontaktieren.
Gruß
Chris
Versuch einmal eine andere Schlaufe ans, also z.B. anstatt von
for line in STDIN.read.split("\n") domal mit
versuchen. Vielleicht hilfts was…