web-dev-qa-db-de.com

git: Push-Fehler (Entpacker-Fehler) bei Berechtigungsproblemen nicht möglich

Ich habe dieses Problem, wenn ich versuche, git zu schieben:

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

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://<repo url>/<repo dir>
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to Push some refs to 'ssh://<repo url>/<repo dir>'

Ich hatte das vorher sporadisch und wir mussten es immer lösen, indem jeder Benutzer das Repo sshing und Gruppenberechtigungen für alle darin enthaltenen Dateien mit festlegte 

chmod -R g+w *

Dies war nie eine zufriedenstellende Lösung und jetzt hat es uns in den Arsch gebissen, als einer der Jungs weg ist und niemand das Passwort seines Repo-Benutzers kennt. Also versuche ich es richtig zu lösen. 

Der Fehler scheint aufzutreten, wenn jemand versucht, eine Änderung hochzuschalten, durch die ein Repo-Verzeichnis geändert wird, das einem anderen Benutzer gehört (und daher die Gruppenschreiboption oben festgelegt wird). Ich habe ein bisschen gegoogelt und ein paar Lösungen gefunden, über die diskutiert wurde (von denen keine für mich funktionierte).

1) Stellen Sie sicher, dass die Gruppe, mit der die Repo-Verzeichnisse gemeinsam genutzt werden, die primäre Gruppe jedes Benutzers ist (ich glaube, dass dies bereits der Fall ist: Jeder Benutzer hat nur eine Gruppe, also muss dies die primäre Gruppe sein, oder?

2) git repo core.sharedRepository-Einstellung, wie hier beschrieben: Git: Kann nicht von einem Computer aus pushen Ich habe dies geändert, aber es machte keinen Unterschied. Muss ich die Konfig neu laden oder etwas, um die Änderung tatsächlich zu bewirken?

Meine Repo-Konfiguration sieht folgendermaßen aus:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = all
[receive]
        denyNonFastForwards = True

Für Hinweise und Anregungen dankbar! Max

49
Max Williams

Eine einfachere Möglichkeit besteht darin, ein Post-Receive-Skript hinzuzufügen, das den Befehl chmod Nach jedem Push an das 'Hub'-Repo auf dem Server ausführt. Fügen Sie Hooks/Post-Receive in Ihrem Git-Ordner auf dem Server die folgende Zeile hinzu:

chmod -Rf u+w /path/to/git/repo/objects
26
spadeworkers

Ich hatte diesen Fehler zwei Wochen lang, und die Mehrheit der Lösungen gab "chmod -R" als Antwort an. Leider waren für mich meine Git-Repos (local/remote/shared - with team) alle auf Windows-Betriebssystemen, und obwohl In chmod -Rv wurden alle Dateien in 'rwxrwxrwx' geändert. Ein nachfolgendes 'ls -l' zeigte weiterhin alle Dateien als 'rwxr-xr-x', und der Fehler wiederholte sich. Ich sah schließlich diese Lösung von Ariejan de Vroom. Es hat funktioniert und wir konnten alle wieder ziehen und drücken.

Führen Sie auf lokalen (lokalen, die Probleme beim Pushing haben) und Remote-Repos die folgenden Befehle aus:

$ git fsck
$ git Prune
$ git repack
$ git fsck

Nebenbei habe ich versucht, die systemeigenen Dateiberechtigungen/ACLs von Windows zu verwenden, und habe sogar den problematischen Benutzer zu Administrator erhoben, aber das schien nichts zu helfen. Sie sind sich nicht sicher, ob die Umgebung wichtig ist, aber sie kann jemandem mit einem ähnlichen Setup - Problemmitglied und Remote (Windows Server 2008 R2 Standard), meinem lokalen (Windows 7 VM), helfen.

18
Jason Robinson

Es ist ein Erlaubnisfehler. Der für mich am besten geeignete und sicherste Weg war Hinzufügen von Benutzern zu einer Zusatzgruppe das Repo. ist im Besitz von (oder umgekehrt):

groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
8
Alastair

Für den Fall, dass jemand anderes daran festhält: Es bedeutet nur das Schreiben Berechtigungen sind im Repo falsch, auf das Sie drücken. Geh und chmod -R es, damit der Benutzer, auf den Sie mit git Server zugreifen, Schreibzugriff hat.

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

Es funktioniert einfach.

5
sjas

Für mich ist dieser Fehler aufgetreten, als ich auf meiner Fernbedienung keinen Platz mehr hatte.

Ich musste nur den Rest der Fehlermeldung lesen:

error: file write error (No space left on device)
fatal: unable to write sha1 file
error: unpack failed: unpack-objects abnormal exit
3
aradil

Ich verwende Gititis, um solche Sachen zu managen. Gitosis hat einen einzigen Benutzer (normalerweise "git" genannt), der alle Repositorys besitzt, und verwendet für jedes Repo eine auf öffentlichen Schlüsseln basierende Zugriffskontrolle. Es passt möglicherweise nicht zu Ihrem Setup, ist aber wahrscheinlich einen Blick wert (kein Wortspiel beabsichtigt).

3
Cameron Skinner

Dieses Problem kann auch nach Ubuntu-Upgrades auftreten, für die ein Neustart erforderlich ist.

Wenn die Datei /var/run/reboot-required vorhanden ist, führen Sie einen Neustart durch oder planen Sie einen Neustart.

1
cmc

Ich hatte auch Probleme damit, weil ich dachte, mein entfernter Gitolit-Administrator sei beschädigt oder etwas nicht in Ordnung. 

Mein Setup ist ein Mac OS X (10.6.6) Laptop mit Ubuntu 10 Remote Server mit Gitolite.

Es stellte sich heraus, dass das Problem bei meiner local - Kasse von gitolite-admin lag. 

Trotz des Fehlers "Auspacken ausgefallen" stellte sich heraus, dass das Problem lokal war.

Ich habe das herausgefunden, indem ich es als gitolite-admin2 noch einmal durchgesehen habe, eine Änderung vorgenommen habe und das Pushing. 

Voila! Es funktionierte!

1
jpswain

Für was es wert war, hatte ich das gleiche Problem mit meinem eigenen VPS und es wurde durch meinen geringen Festplattenspeicher auf VPS verursacht. Bestätigt durch df -h Befehl und nachdem ich die Festplatte meines VPS aufgeräumt habe; Das Problem war weg.

Prost.

1
dariush

Für mich ist es eine Berechtigungsfrage:

Führen Sie auf dem git-Server diesen Befehl im Repo-Verzeichnis aus

Sudo chmod -R 777 theDirectory/
0
MobileMon

Wo ich arbeite, haben wir diese Methode seit einigen Jahren problemlos in allen unseren Repositories verwendet (außer wenn wir ein neues Repository erstellen und vergessen, diese so zu konfigurieren):

  1. Legen Sie 'sharedRepository = true' im Abschnitt [core] der Konfigurationsdatei fest.
  2. Ändern Sie die Gruppen-ID des Repositorys in eine Gruppe, die von allen Benutzern gemeinsam genutzt wird, denen Push zu diesem erlaubt ist:

    chgrp -R shared_group /git/our_repos
    chmod -R g+w /git/our_repos
    
  3. Setzen Sie das Setgid-Bit für alle Verzeichnisse im Repository so, dass neue Dateien/Verzeichnisse dieselbe Gruppe behalten:

    find /git/our_repos -type d -exec chmod g+s {} +
    
  4. Fügen Sie diese Zeile zum Pre-Receive-Hook im Repository hinzu, um sicherzustellen, dass neue Dateiberechtigungen das Lesen/Schreiben von Gruppen zulassen:

    umask 007
    
0

Ich habe einen ähnlichen Fehler erhalten und bitte sehen Sie unten, wie ich es gelöst habe.

Meine Verzeichnisstruktur: /Opt/git/project.git und git user ist git

$ cd /opt/git/project.git
$ Sudo chown -R git:git .

chown mit der Option -R ändert rekursiv den Besitzer und die Gruppe (da ich den Befehl git: git in oben eingegeben habe) des aktuellen Verzeichnisses. chown -R ist notwendig, da git viele Dateien in Ihrem git-Verzeichnis ändert, wenn Sie in das Repository pushen.

0
Hrushikesh