web-dev-qa-db-de.com

git: Datei kann nicht indiziert werden - Berechtigung verweigert

Nur für eine Datei erhalte ich die folgende Fehlermeldung:

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied

error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database
fatal: unable to index file wp/wp-admin/css/theme-install.dev.css

Ich habe meine Berechtigungen für die betreffende Datei, das betreffende Verzeichnis .git objects und .git selbst überprüft. Ich kann alle anderen Dateien außer dieser hinzufügen. Ich konnte die Datei stat/r/w/touch, und das Berühren half nicht. Die Berechtigungen sind alle korrekt. 

Ist das ein verrückter Fehler?

20
h4xnoodle

Betrachtet man den Git-Quellcode (sha1_file.c, Funktion move_temp_to_file()), sieht es so aus, als würde Git eine temporäre Datei mit dem Namen /opt/www/.git/objects/3f/tmp_obj_XXXXXX (wobei XXXXXX sechs zufällige Zeichen ist) nicht in /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47 umbenannt. Dies kann passieren, wenn Sie keine Berechtigung zum Löschen von Dateien in /opt/www/.git/objects/3f haben.

Einige Dinge zu versuchen:

  • Wenn mehrere Benutzer auf das Git-Repository zugreifen, müssen Sie möglicherweise etwas wie git config core.sharedRepository 0664 ausführen (siehe git help config für Details), um sicherzustellen, dass neu erstellte Verzeichnisse und Dateien über die erforderlichen Berechtigungen für alle Benutzer des Repositorys verfügen.
  • Versuchen Sie, rm -f /opt/www/.git/objects/3f/tmp_obj_* auszuführen, und prüfen Sie, ob dadurch das Problem behoben wird.
  • Prüfen Sie, ob Sie das Problem außerhalb von Git reproduzieren können, indem Sie folgende Schritte ausführen:

    mkdir -p /opt/www/.git/objects/3f
    cd /opt/www/.git/objects/3f
    rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47
    echo "testing" >tmp_obj_abcdefg
    mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47
    rm -f tmp_obj_abcdefg
    

    Stellen Sie sicher, dass Sie die obigen Befehle mit demselben Benutzer ausführen, bei dem der Fehler aufgetreten ist.

  • Versuchen Sie rekursiv chowning und chmoding des Objektverzeichnisses.
13
Richard Hansen

Wenn Sie Visual Studio oder etwas Ähnliches verwenden, das die MDF-Datei generiert, schließen Sie einfach VS und wiederholen Sie den Befehl git. Diesmal sollte es klappen.

Um das Schließen und das erneute Öffnen zu speichern, sollten Sie der .gitignore-Datei im Projektstamm Verweise hinzufügen. Wenn es sich beispielsweise um eine Datenbank handelt, die das Problem verursacht, fügen Sie Folgendes hinzu:

# SQL Server files
*.mdf
*.ldf
45
ShrapNull

Sie haben keine Berechtigung zum Schreiben in /opt/www/.git/objects/3f.

Die schnellste Lösung ist die Verwendung des Befehls Sudo, um den Befehl mit Root-Berechtigungen auszuführen.

Sudo <Your git command>

Ich habe es für mich gelöst.

5
william.eyidi

Schließen Sie einfach das Visual Studio (oder Unity) und versuchen Sie, diese Dateien erneut hinzuzufügen.

2
Yar

In Ihrem Git-Repository ist etwas schiefgelaufen, was wahrscheinlich darauf zurückzuführen ist, dass ein externer Prozess eine Datei oder ein Verzeichnis erstellt, das einem anderen Benutzer als dem aktuellen Benutzer gehört. 

Dieser Fehler tritt häufig bei der Verwendung von Docker auf, und ein Dienst in Ihrer Datei docker-compose.yml verfügt über ein lokal angehängtes Volume, das mit einem anderen Benutzer erstellt wurde als der Benutzer des lokalen Computers. 

Wenn dieser Fehler zum ersten Mal aufgetreten ist, führen Sie den folgenden Befehl in Ihrem Arbeitsverzeichnis aus, um den Besitz der Dateien und Ordner wieder an den angemeldeten Benutzer zu ändern:

Sudo chown -R ${USER}:${USER} .

Wenn dies nicht das erste Mal ist, dass Sie auf dieses Problem gestoßen sind, das heißt, Sie haben bereits Dateien und Ordner übergeben, die sich im Besitz eines anderen Benutzers befinden, wird das Problem allein nicht behoben, sondern auch der obige Befehl ausgeführt müssen die folgenden Anweisungen ausführen.

Bei weitem ist die schnellste Lösung das Ausführen des folgenden Projekts aus Ihrem Stammprojektverzeichnis, das Ihr Git-Repository enthält:

Sudo chown -R ${USER}:${USER} .git/objects

Um zu testen, dass alles behoben ist, führen Sie Folgendes aus:

git add .

Schnell gefolgt von der Ausführung:

git status

Sie werden sehen, dass alles zum Git-Repository hinzugefügt wurde, ohne dass Sie weitere Tests durchführen müssen.

1
Mat

Ich hatte dieses Problem in meinem reinen Origin-Repository, als die Berechtigungen root: git 770 waren. Ich musste es anscheinend in 771 ändern, obwohl sich mein Benutzer in der Gruppe git befindet. Ich vermute, dass git vielleicht nicht acl-bewusst ist oder nicht mit sekundären Gruppen kompatibel ist, da die git-Gruppe in diesem Fall eine meiner sekundären Gruppen war.

0
RedScourge