Ich habe ein vorhandenes Git-Repo (ein nacktes), das bis jetzt nur von mir geschrieben werden konnte. Ich möchte es für eine UNIX-Benutzergruppe öffnen, foo, damit alle Mitglieder von foo darauf zugreifen können. Mir ist bewusst, dass ich problemlos ein neues Git-Repo einrichten kann mit:
git init --bare --shared=group repodir
chgrp -R foo repodir
Aber ich brauche die entsprechende Operation für ein vorhandenes Repo-Verzeichnis.
git
permissions
share
shared
Pistos
quelle
quelle
Antworten:
Versuchen Sie Folgendes, damit ein vorhandenes Repository
repodir
für Benutzer in Gruppen funktioniertfoo
:quelle
git init --shared
Befehl für ein vorhandenes Repo verwenden, um den Konfigurationswert festzulegen. Sie müssen auch denchmod
Befehl ausführen, um die Berechtigungen der Dateien richtig zu erhalten.git pull
etc. als root gemacht hat und nicht alswww-data
oder was auch immer der Besitzer ist und als Ergebnis erhalten Sieerror: insufficient permission for adding an object to repository database .git/objects
. Ich dachte, ich hätte den Besitz aller Dateien / Verzeichnisse, die mitfind
und-type d
/ falsch waren, behobentype -f
, aber nur diese Methode hat den Fehler beseitigt (wahrscheinlich, weil eine Datei in einem Unterverzeichnis nicht für Gruppen beschreibbar war?)core.sharedRepository
dies erwähnen würde - es scheint nutzlos, ohne dass Benutzer alle ihre Dateigruppen beschreibbar machen.Führen Sie im Repo-Verzeichnis folgende Befehle aus:
Bearbeiten: Um häufige Verwirrung zu vermeiden,
group
ist ein aktuelles Schlüsselwort, das Sie nicht durch den Namen der Gruppe ersetzen sollten.quelle
group
ist NICHT der Name der Gruppe :)git config core.sharedRepository dev
dann zugit config
fatal: bad config value for 'core.sharedrepository' in .git/config
git version
1.7.0.4
git config core.sharedRepository group
group
ist nicht der Name der Gruppe, sondern der tatsächliche Wert!Durch das Zusammenführen der Antworten von @David Underhill und @kixorz habe ich meine eigene (endgültige) Lösung gefunden.
Es ist für nackte Repos und nicht nackte Repos. Es gibt nur geringe Unterschiede zwischen ihnen, aber auf diese Weise wird klarer.
BARE REPOSITORY
wo:
<repo.git>
ist das nackte Repository-Verzeichnis, normalerweise auf dem Server (zmy_project.git/
. B. ).<group-name>
ist der Gruppenname für Git-Benutzer (z . B. Benutzer ).NICHT BARE REPOSITORY
wo:
<project_dir>
ist das Projektverzeichnis, das den.git
Ordner enthält.<group-name>
ist der Gruppenname für Git-Benutzer (z . B. Benutzer ).quelle
chmod g-w objects/pack/*
(wenn nicht nacktes Repository, voranstellen.git/
)find . -type d
' löst Fehler ausunable to execute /bin/chmod: Argument list too long
chmod g+s `find . -type d`
nicht. Verwenden Siefind -type d -exec chmod g+s {} +
chmod g-w objects/*/*
. Ich bin mir jedoch nicht sicher über das Info-Unterverzeichnis, da es für dieses Repo leer ist.Dies ist wahrscheinlich nicht erforderlich, aber es ist erwähnenswert, dass
git init --bare --shared
auch die Option verweigernNonFastForwards festgelegt ist .Diese Option hat folgende Bedeutung:
(von http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration )
quelle
Zusätzlich zu den obigen Antworten zum Zulassen des Lesens / Schreibens einer Gruppe müssen Sie den Benutzer zur Gruppe hinzufügen (sagen Sie "foo").
Hinweis: Sie müssen zuerst einen Benutzer erstellen, wenn dieser nicht vorhanden ist
quelle