Was kann/soll ich gegen diesen Git-GC-Fehler tun? (rm: Verknüpfung zum Paket kann nicht aufgehoben werden. Berechtigung verweigert)

Lesezeit: 5 Minuten

Benutzer-Avatar
Danludwig

Beim Ausführen von git gc sehe ich immer wieder diesen Fehler:

rm: cannot unlink 'pack-30b1ff2[reset of hash].pack': Permission denied

Was kann/sollte ich gegen diesen Fehler tun?

Aktualisieren

Entschuldigung, ich hätte mehr Infos geben sollen. Ja, einen Neustart habe ich versucht. Tatsächlich haben Neustarts gc-Probleme für mich schon einmal behoben.

Ich habe dieses Problem nur bemerkt, weil ich beim Öffnen von Git Gui hin und wieder aufgefordert werde, die Datenbank zu komprimieren. Ich bemerkte schließlich, dass ich nach ein paar Mal Öffnen von Git Gui immer wieder aufgefordert wurde, obwohl ich auf Ja geklickt hatte, und es kam “erfolgreich” zurück.

Also habe ich versucht, es mit dem Befehl “Einstellungen – Git-Wartung – Git-Datenbank komprimieren” von Git EXT auszuführen. Dieser Befehl teilte mir mit, dass ein Fehler aufgetreten ist (rotes Licht in Git EXT, während in Git Gui ein grünes Licht leuchtete).

Der Fehler, den ich oben gepostet habe, war jedoch das Ausführen von git gc direkt von git bash.

Sollte ich einen Datenträgerscan planen? Könnten fehlerhafte Sektoren dies verursachen? Ich hatte gehofft, dass dies eine schnelle Antwort ist 🙁

  • Überprüfen Sie die Berechtigungen, und wenn sie vernünftig aussehen, erstellen Sie eine Sicherungskopie und überprüfen Sie Ihr Dateisystem.

    – Matte

    5. Mai 2012 um 12:34 Uhr

  • Dies ist unter Windows 7. Soll ich die Berechtigungen für den .git-Ordner überprüfen? Läuft git als mein Benutzerkonto? Ich bin ein Administrator und diese Gruppe hat Vollzugriff auf den .git-Ordner.

    – danludwig

    5. Mai 2012 um 12:40 Uhr

  • Sorry, hatte Linux angenommen. Ich verstehe nie die genauen Details der Windows-Berechtigungen. Aber Sie sollten nicht von vornherein mit einem Administratorkonto entwickeln.

    – Matte

    5. Mai 2012 um 12:43 Uhr

  • Hast du einen Neustart versucht? Möglicherweise verwendet ein Prozess diese Datei und verhindert, dass sie entfernt wird.

    – Pedro Rodrigues

    5. Mai 2012 um 16:11 Uhr

  • Ich habe meine Frage aktualisiert, tut mir leid, ich hätte von Anfang an mehr Informationen bereitstellen sollen.

    – danludwig

    5. Mai 2012 um 17:55 Uhr

„Berechtigung verweigert“ unter Windows wird häufig durch eine Sperre eines laufenden Prozesses verursacht. Es ist wahrscheinlich, dass ein blockierter Git EXT-Thread die Pack-Datei geöffnet hat.

Versuchen Sie, dies zu tun git gc im abgesicherten Modus.

Eine andere Möglichkeit besteht darin, das Repository an einem neuen Ort zu klonen und das alte zu löschen.

  • Danke, ich hatte gehofft, ein erneutes Klonen zu vermeiden, also wird der abgesicherte Modus hoffentlich funktionieren. Werde es beim nächsten Neustart versuchen.

    – danludwig

    5. Mai 2012 um 18:14 Uhr

  • Ich brauchte nicht einmal den abgesicherten Modus. Ich habe git gc als erstes nach einem normalen Start ausgeführt, und es gab keinen Fehler, bei dem die Berechtigung verweigert wurde. Vielen Dank.

    – danludwig

    6. Mai 2012 um 16:07 Uhr

  • In meinem Fall war es devenv.exe (ein Git-Plugin in Visual Studio), das die Dateien sperrte. LockHunter ist ein gutes Werkzeug, um diese zu finden, und Sie können es von der Befehlszeile aus skripten, um das Entsperren von Dateien zu erzwingen: "%PROGRAMFILES%\LockHunter\LockHunter.exe" /unlock "%CD%\.git\objects\pack" /silent && git gc

    – Richard Dingwall

    30. Mai 2013 um 13:58 Uhr


  • Ah, ich habe die verschiedenen Plugins/Erweiterungen vergessen, die möglicherweise Git verwenden. In meinem Fall schließen Sie Eclipse vor dem Ausführen git gc hat es geschafft.

    – Jacobq

    25. September 2013 um 15:08 Uhr

  • In meinem Fall war es Eclipse (mit installiertem EGit-Plugin), das die Dateien gesperrt hat. Während Entsperrer konnte Eclipse nicht als Sperranwendung erkennen, LockHunter war. Danke @RichardDingwall für den Tipp!

    – Schubert

    27. November 2013 um 11:41 Uhr

In meinem Fall war es TortoiseGit. Um das Problem zu lösen, habe ich TortoiseGit Settings->Icon Overlays geöffnet und den Status-Cache auf “None” gesetzt. Nun wird der Prozess TGitCache beendet, sodass alle Objekte „frei“ sind, um von git gc verarbeitet zu werden.

Geben Sie hier die Bildbeschreibung ein

Sie müssen Ihre Konsole dort schließen, wo der Befehl auftritt, der den Befehl gesperrt hat. Dies kann ein VI sein, das die Datei sperrt, oder ein beliebiger Befehl, der abgebrochen wurde. Die einfachste Lösung ist, alles zu schließen und neu zu öffnen. Sie sollten den Befehl problemlos ausführen können.

Git 2.23 (Q3 2019) sollte ein Problem mit verweigerten Berechtigungen während vermeiden gc aufgrund des Commit-Graphen (eingeführt in Git 2.18), der Informationen, die für das Ancestry-Traversal erforderlich sind, vorberechnet und in einer separaten Datei speichert, um das Graph-Walking zu optimieren.

Bei Git 2.23 ist die Commit-Graph-Datei Teil der „Dateien, auf denen die Laufzeit möglicherweise Dateideskriptoren offen hält, die alle geschlossen werden müssten, wenn der Objektspeicher fertig ist“, und der Dateideskriptor zu einem vorhandenen Commit- Grafikdatei ist jetzt geschlossen Vor “gc” finalisiert eine neue Instanz, um sie zu ersetzen.

Sehen begehen 2d511cf, Commit 5472c32, c3a3a96 übergeben (17. Mai 2019) von Derrick Stolee (derrickstolee).
(Zusammengeführt von Junio ​​C. Hamano — gitster in übertrage 5cb7c7309.07.2019)

packfile: Commit-Graph schließen close_all_packs

Das close_all_packs() -Methode wird verwendet, um alle Lesezugriffe auf Pack-Dateien und den Multi-Pack-Index zu schließen, bevor ‘git gc --auto‘.
Dies ist besonders wichtig auf der Windows-Plattform, wo Lese-Handles alle Schreibvorgänge in diese Dateien blockieren.
Ersetzen Sie eine dieser Dateien durch a rename() wird in dieser Situation scheitern.

Der Commit-Graph führt auch eine Umbenennung durch, ist also anfällig für dieses Problem.
Wir achten darauf, den Commit-Graphen vor dem Schreiben zu schließen, aber das funktioniert nicht, wenn ein ‘git fetch‘ (oder ähnlicher) Prozess läuft ‘git gc --auto‘, die einen Commit-Graphen schreiben kann.

Schließen Sie hier das Commit-Diagramm als Teil von close_all_packs().

1246530cookie-checkWas kann/soll ich gegen diesen Git-GC-Fehler tun? (rm: Verknüpfung zum Paket kann nicht aufgehoben werden. Berechtigung verweigert)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy