linus - linux git clone



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

Ich habe dieses Problem, wenn ich versuche, git einzudrücken:

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 voranzutreiben, 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: Ich kann nicht von einem Computer aus pushen. Ich habe das geändert, aber es hat keinen Unterschied gemacht. 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

https://ffff65535.com


Für den Fall, dass jemand anderes daran festhält: Dies bedeutet nur, dass die Schreibberechtigungen im Repo, zu dem Sie wechseln, falsch sind. Go und chmod -R it, damit der Benutzer, auf den Sie mit git-Server zugreifen, über Schreibzugriff verfügt.

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

Es funktioniert einfach.


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.


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

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

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

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 den Befehl df -h und nachdem ich die Festplatte meines VPS aufgeräumt habe; Das Problem war weg.

Prost.


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 wechseln.


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 habe diese Lösung schließlich von Ariejan de Vroom gesehen. 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.


Ich verwende Gititis, um diese Art von Sachen zu verwalten. 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 vielleicht nicht zu Ihrem Setup, ist aber wahrscheinlich einen Besuch wert (kein Wortspiel beabsichtigt).


Für den Berechtigungsfehler bei der Verwendung des git-Repositorys für die AWS-Instanz wurde der Fehler behoben, indem eine Gruppe erstellt und rekursiv dem Repository-Ordner (-R) zugewiesen wurde. Ich erteile der Gruppe das geschriebene Recht und weise den Standardbenutzer der aws-Instanz zu (ec2-user oder ubuntu) zu dieser Gruppe.

1. Erstellen Sie einen Gruppennamen share_group oder etwas anderes

     sudo groupadd share_group

2. Ändern Sie den Repository-Ordner von 'root' in 'share_group'.

     sudo chgrp -R share_group /path/to/your/repository

3. Fügen Sie die Schreibberechtigung zu share_group hinzu

     sudo chmod -R g+w /path/to/your/repository

4. Der letzte Schritt ist das Zuweisen des aktuellen Benutzers - Standardbenutzer beim Anmelden (standardmäßig ist ec2 'ec2-user', der Benutzer der ubuntu-Instanz 'ubuntu' in ubuntu auf aws) der share_group. Ich benutze Ubuntu Insance auf aws, mein Standardbenutzer ist also Ubuntu.

     sudo usermod -a -G share_group ubuntu

Um den Besitz des Ordners oder der Datei anzuzeigen, geben Sie einfach Folgendes ein:

    ls -l  /path/to/your/repository

'

Ausgabe:

    drwxr-x--x  2 root shared_group
(Erklärung siehe: https://wiki.archlinux.org/index.php/File_permissions_and_attributes ).

Nach Schritt 3 werden Sie sehen

    drwx--x--x  2 root root

gewechselt zu

    drwxr-x--x  2 root share_group 

In diesem Fall habe ich den Benutzer 'ubuntu' der Root-Gruppe aus Sicherheitsgründen nicht zugewiesen. Sie können einfach versuchen, Ihren Standardbenutzer dem Root gemäß Schritt 4 zuzuweisen (überspringen Sie einfach die ersten 3 Schritte

Auf andere Weise versuchte die Lösung durch:

    chmod -Rf u+w /path/to/git/repo/objects
Es hat für mich nicht funktioniert, ich denke, es sollte der Grund sein, dass mein Repository-Ordner zum Root-Benutzer und nicht zum Ubuntu-Benutzer gehört, und "git" verwendet standardmäßig den Standardbenutzer (ec2-user oder Ubuntu-Benutzer. Sie können es versuchen.) den Benutzer wechseln und testen.

Schließlich funktioniert der Code unten definitiv für mich, aber 777 ist nicht gut für die Sicherheit

    sudo chmod -R 777 /path/to/your/repo




git