machen Git-repository global beschreibbar
Wir haben 3 Personen mit einem gemeinsamen Git-repo. Wir haben keine sudo-Berechtigung zum erstellen/ändern der Gruppe. Da die Maschine ist sicher, wir wurden gebeten, die Git global beschreibbar(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 nach dem Zufallsprinzip. Wenn eine person schiebt seinen code, ich habe nicht diesen Fehler.Wenn eine andere person schiebt seinen code, bekam ich diese Fehlermeldung wieder.
Habe ich getan git repo-config core.sharedRepository true
, scheint aber nur für groups
. Wie setze ich Git um neue Dateien global beschreibbaren?
InformationsquelleAutor Wei Shi | 2011-06-15
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wir kamen gerade über das gleiche Problem. Hier ist, wie wir Sie angegangen habe, zusätzlich zu laufen
git repo-config core.sharedRepository true
.Hinweis: dieser wurde auf einem Ubuntu Linux server - Sie benötigen verschiedene Befehle, die auf Ihrem OS, aber der Ansatz sollte weitgehend vergleichbar. Beachten Sie, dass viele dieser Befehle müssen als root ausgeführt werden, oder unter
sudo
.Schritt 1. Erstellen Sie eine neue, gemeinsame Gruppe
Beispielsweise Entwickler. Fügen Sie Ihre Entwickler es.
Schritt 2. Ändern der Gruppenzugehörigkeit der vorhandenen repository
Machen auch die Dateien, die Gruppe-und beschreibbar:
Schritt 3. Stellen sicher, dass neue Verzeichnisse erstellt, mit der Gruppe auf die neue Gruppe name
In einige *nix-Betriebssystemen (z.B. FreeBSD, OS X) die Gruppe der neu erstellten Dateien vererbt vom übergeordneten Verzeichnis. Auf anderen Betriebssystemen (z.B. Ubuntu) es ist von der Gruppe bestimmt, der Erstellung Prozess. Im letzteren Fall können Sie überschreiben, dass Verhalten durch das setzen des setgid-flag auf das übergeordnete Verzeichnis. Also eine Möglichkeit, um sicherzustellen, dass neue Verzeichnisse angelegt, z.B. durch
git pull
haben der gleichen Gruppe wie Ihre Eltern ist regelmäßig zu laufen so etwas wie dieses:(z.B. alle Dateien unter /path/to/repo-Typ-Verzeichnis und führen Sie den Befehl chmod g+s auf zu stellen, um die das setgid-flag.)
Andere Weise, die Sie vielleicht diesen Ansatz wird erreicht, indem Entwickler die primäre Gruppe anmelden für alle Entwickler:
(Beachten Sie, dass diese kann ein Benutzer nicht mehr ein Mitglied Ihrer früheren primäre Gruppe anmelden, in der Regel der Gruppe mit dem gleichen Namen wie der Benutzername. Verwenden
usermod -aG old_group usernanme
wiederherstellen, die Mitgliedschaft.)Mit
usermod -g developers
bedeutet, dass, wenn ein Benutzer erstellt neue Dateien werden standardmäßig im Besitz von Benutzer:Benutzername, Gruppe:Entwickler. Aber neue Dateien werden normalerweise so angelegt, dass Sie nur vom Benutzer schreibbar sind, nicht Konzern-und beschreibbar. (d.h. wenn Sietouch foo; ls -l foo
Sie sehen die Berechtigungen, die Maske als-rw-r--r--
.) Neue Dateien, die Sie erstellen in Gruppen-und beschreibbar standardmäßig, fügen Sieumask 0002
zum Ende Ihrer.profile
oder.bash_profile
Datei.Puh! Hoffe, das hilft. Ich bin sicher, dass dieser Prozess nicht perfekt und es ist definitiv nicht eine one-size-fits-all, aber ich hoffe es ' ll geben Ihnen einige Hinweise. Ich habe es ein community-wiki, so dass andere Personen hinzufügen können Sie.
Dies ist eine hässliche Lösung, aber es scheint zu funktionieren. Es basiert auf der post-receive hook, der verwendet wird, um Berechtigungen für alle Dateien im repository nach jedem push in das repository.
Setzen die Entwickler in eine Gruppe (sagen
developers
), und führen Siechgrp -R developers myrepo-on-the-server/
.users
.