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 ?
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:
(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.
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.
Tags und Links git permissions filesystems