lässt das Git-Repository global schreibbar machen

8

Wir haben 3 Leute, die ein gemeinsames Git Repo benutzen. Wir haben keine sudo-Berechtigung zum Erstellen / Ändern der Gruppe. Da die Maschine sicher ist, wurden wir gebeten, das Git global beschreibbar zu machen ( chmod +R o+rw * ). Allerdings bekommen wir diesen Fehler von Zeit zu Zeit.

error: insufficient permission for adding an object to repository database .git/ objects

Dies geschieht zufällig. Wenn jemand seinen Code drückt, bekomme ich diesen Fehler nicht. Wenn eine andere Person ihren Code drückt, habe ich diesen Fehler erneut bekommen.

Ich habe git repo-config core.sharedRepository true gemacht, scheint aber nur auf groups anzuwenden. Wie stelle ich Git so ein, dass neue Dateien global schreibbar gemacht werden ?

    
Wei Shi 15.06.2011, 14:16
quelle

3 Antworten

13

Wir sind gerade auf dasselbe Problem gestoßen. Hier ist, wie wir es neben dem Laufen angegangen haben git repo-config core.sharedRepository true .

Hinweis: Dies war auf einem Ubuntu Linux Server - Sie benötigen möglicherweise andere Befehle auf Ihrem Betriebssystem, aber der Ansatz sollte weitgehend ähnlich sein. Beachten Sie, dass viele dieser Befehle als root oder unter sudo ausgeführt werden müssen.

Schritt 1. Erstellen Sie eine neue, freigegebene Gruppe

Zum Beispiel Entwickler . Fügen Sie Ihre Entwickler hinzu.

%Vor%

Schritt 2. Ändern Sie die Gruppeneigentümerschaft für das vorhandene Repository

%Vor%

Machen Sie auch die Dateien in Gruppen schreibbar:

%Vor%

Schritt 3. Stellen Sie sicher, dass neue Verzeichnisse erstellt werden, wobei die Gruppe auf den neuen Gruppennamen

gesetzt wird

In einigen * Nix-Betriebssystemen (z. B. FreeBSD, OS X) wird die Gruppe neu erstellter Dateien vom übergeordneten Verzeichnis übernommen. Auf anderen Betriebssystemen (z. B. Ubuntu) wird es von der Gruppe des Erstellungsprozesses bestimmt. Im letzteren Fall können Sie dieses Verhalten überschreiben, indem Sie das Flag setgid im übergeordneten Verzeichnis setzen. Eine Möglichkeit, um sicherzustellen, dass neue Verzeichnisse, die z. git pull haben die selbe Gruppe wie ihr Elternteil, um etwas wie dieses periodisch auszuführen:

%Vor%

(d. h. finde alle Dateien unter / path / to / repo des Verzeichnisses type und führe chmod g + s auf ihnen aus, um das setgid-Flag zu setzen.)

Eine andere Möglichkeit, die Sie erreichen können, besteht darin, Entwickler für alle Entwickler die primäre Login-Gruppe zu machen:

%Vor%

(Beachten Sie, dass dies dazu führen kann, dass ein Benutzer nicht länger Mitglied seiner vorherigen primären Login-Gruppe ist, typischerweise der Gruppe mit demselben Namen wie der Benutzername. Verwenden Sie usermod -aG old_group usernanme , um diese Mitgliedschaft wiederherzustellen.)

Die Verwendung von usermod -g developers bedeutet, dass wenn ein Benutzer neue Dateien erstellt, diese standardmäßig dem Benutzer gehören: Benutzername , Gruppe: Entwickler. Neue Dateien werden jedoch normalerweise so erstellt, dass sie nur vom Benutzer beschreibbar und nicht schreibbar sind. (Wenn Sie touch foo; ls -l foo ausführen, sehen Sie die Berechtigungsmaske als -rw-r--r-- .) Damit neue Dateien, die Sie erstellen, standardmäßig in Gruppen beschreibbar sind, fügen Sie umask 0002 am Ende Ihrer .profile oder .bash_profile hinzu. Datei.

%Vor%

Puh! Hoffe das hilft. Ich bin mir sicher, dass dieser Prozess nicht perfekt ist und es ist definitiv kein One-Size-Fits-All, aber hoffentlich gibt es dir ein paar Hinweise. Ich habe es zu einem Community-Wiki gemacht, damit andere es hinzufügen können.

    
Simon Whitaker 15.06.2011, 14:47
quelle
3

Das ist eine hässliche Lösung, aber es scheint zu funktionieren. Es basiert auf dem Post-Receive-Hook, mit dem nach jedem Push-Vorgang für das Repository Berechtigungen für alle Dateien im Repository festgelegt werden.

%Vor%     
midtiby 15.06.2011 14:38
quelle
1

Setze alle Entwickler in eine Gruppe (zB developers ) und führe chgrp -R developers myrepo-on-the-server/ .

aus     
tamasd 15.06.2011 14:20
quelle

Tags und Links