Berechtigungsprobleme mit dem teilen ein GIT-Remote-Repository
Habe ich ein GIT repository zu verwalten, dass ich für mein Büro. Weil die Firmenpolitik kann man auch keine externen hosting-Anbieter wie GitHub und dergleichen. Also, ich bin Links, um zu tun, was ich kann mit unserem lokalen Netzwerk.
Jeder schafft Ihre eigenen lokalen repositories, aber wir haben auch ein remote-repository, dass unsere Nutzer die push-to - (und zugänglich sind Anwendungen wie Hudson und Fisheye), die ähnlich wie ein zentrales repo wäre in subversion. Jeder Benutzer hat den öffentlichen Schlüssel-setup, so dass Sie ausführen können, ohne Kennwort-Authentifizierung auf die box hosting unser remote repository.
Für unsere remote-repository, ich habe Sie so konfiguriert werden gemeinsam im "group" - Modus:
git config core.sharedRepository group
Alle unsere Benutzer sind auch Mitglieder der git-Gruppe, aber das ist nicht die primäre Gruppe für viele Benutzer. Es scheint, als git erstellt oder aktualisiert keine Objekte auf "push", es verwendet die primäre Gruppe des Benutzers. Stattdessen muss es um die Verwendung des gemeinsamen "git" - Gruppe, die jeder Benutzer Mitglied ist. Ich habe gesehen, Dokumentation im web, die zuvor diskutiert-Einstellung sticky-bit, aber es schien zu unterscheiden, basierend auf der Quelle und hat nicht wirklich was mit der Frage der Schaffung einer gemeinsamen Gruppe (, wenn ich mich einfach nur Dateien beliebig schreiben können, ich könnte genauso gut machen Sie 777).
Update:
Mit Matthew Flaschen ist Antwort unten
chgrp -R git repo.git
find repo.git -type d -exec chmod g+rws {} +
War ich in der Lage, erstellen Sie ein repository, das konnte jeder push-und pull-gemeinsam aus. Ich werde auch einen Blick in gitolite, aber meine Bedürfnisse sind ziemlich einfach, und unserer Umwelt erlaubt für Benutzer und Schlüssel werden automatisch konfiguriert, so dass es nicht als Schlüssel. Allerdings möchte ich sicherstellen, dass ich den Umgang mit diesem zu korrigieren.
Meine repository-Struktur enthält eine top-level-Verzeichnis (remote-repos) und Unterverzeichnisse für jeden meiner repositories (app-1.git, app-2.git, Bibliothek-1.git, etc). Ich sollte in der Lage sein, gelten die chmod g+rws {} + dem top-level-Verzeichnis (remote-repos) anstelle der einzelnen repo, richtig? Der find-Befehl
find /opt/remote-repos -type d -exec ...
Findet alle Verzeichnisse unter /opt/remote-repos Lage, und führt einen Befehl auf Sie. Der Befehl (chmod g+RW) sorgt dafür, dass die Gruppe kann Lesen und schreiben diese Dateien, sowie legt die klebrigen Wette so dass die angegebene Gruppe ist immer bei der Ausführung verwendet. (Ich habe keine Ahnung, wie die {} + - Teil, ich gehe davon aus, dass die mit der find-exec-option).
Sowieso, möchte nur bestätigen, dass mein Verständnis für diese Lösung richtig ist.
Weitere Referenzen:
- chmod aus Wikipedia
- SetGID (oder SetUID) aus Wikipedia
- Git SharedRepository option Diskussion
- Es könnte einfacher sein, richten Sie eine HTTP-basierte Lösung, und nur der server-Prozess schreiben an die zentrale repository-Dateien.
- Sie sollten einen Versuch geben, um gitolite!
- Während gitolite-sieht gut aus, ich habe bereits viel von der Funktionalität (ssh-Zugang, Schlüssel, etc.) gebacken in meiner enviro. Das einzige Stück, das wirklich fehlte, war die richtige Gruppe Berechtigungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
git hat jetzt eine
core.sharedRepository
option für genau diesen Zweck.Empfehle ich:
Dann, um die anfängliche Gruppe Besitz, do:
in der Wurzel der repo.
Für ein neues repo, die Sie tun können:
Nur, wenn die oben nicht funktioniert:
s ist das setgid-flag. Auf dem Verzeichnisse, das bedeutet, dass die Dateien und Verzeichnisse erstellt in diesem Verzeichnis die gleiche Gruppe (git in diesem Fall). Neu erstellte Unterverzeichnisse Erben auch setgid.
Dies ist ähnlich wie das git-repo ist eingerichtet bei meiner Arbeit. Jedoch, ich Stimmen Sie sollten eine aktuelle git-server-Prozess.
chmod g+s
noch erforderlich ist.Benutzer sollten Sie nicht verwenden, jeden git Befehl mit sudo-Berechtigungen.
Wenn es nicht funktioniert, ohne
sudo
Berechtigungen, stellen Sie sicher, überprüfen Sie die Berechtigung für alle Ordner mit755
und Dateien, die mit644
,Mithilfe der folgenden Befehle können Sie die Berechtigungen zurücksetzen, wie erwartet.
Obigen Befehl verwenden müssen, um
sudo
Berechtigungen.Nachdem diese Aktivität sollten Sie
commit
+push
alle änderungen repoEs wird neu erstellen, Berechtigungen für alle code-Dateien im repo.
Der einfachste Weg ist die Verwendung von Gitolite. Ich habe großen Erfolg damit.