394 Stimmen

git rebase: "error: cannot stat 'file': Erlaubnis verweigert"

Ich verwende Git und habe eine kleine Übergabe gemacht, gefolgt von einer großen. Ich beschloss, Folgendes zu verwenden git rebase um die beiden Commits vor dem Pushen zusammenzufassen. (Ich habe das noch nie gemacht.)

Das habe ich getan:

git rebase -i HEAD~2

So kam ich zu meinem Editor, in dem ich die frühere Übertragung auswählte und die spätere zerdrückte. Als ich speicherte, sagte Git:

Fehler: kann nicht angeben ' Dateiname ': Erlaubnis verweigert

Konnte sich nicht bewerben sha1 für spätere Übergabe ... Anfangszeile des Textes für diese Übertragung

Jetzt:

  • Keine der beiden Übertragungen erscheint, wenn ich git log .
  • git status sagt mir, dass ich "derzeit in keiner Filiale bin".
  • Eine Datei wird als geändert und im Index aufgeführt, und zwei Dateien werden als nicht verfolgt aufgeführt. Mein erster Commit hatte nur eine Datei (glaube ich), und mein zweiter Commit hatte ein gutes Dutzend.

Was ist passiert? Wie bringe ich das in Ordnung?

719voto

Cameron Wright Punkte 7201

Versuchen Sie, alle Programme zu schließen, in denen der Ordner geöffnet ist, z. B. Editoren, Windows Explorer, Eingabeaufforderungen und FTP-Programme. Dies behebt das Problem bei mir unter Windows immer.

314voto

ManJan Punkte 3861

Schließen Sie einfach Ihre IDE (VISUAL STUDIO/ATOM usw.). Es könnte funktionieren

215voto

CB Bailey Punkte 693084

Ich habe diesen Fehler bisher nur unter Windows gesehen, und er scheint zu bedeuten, dass etwas Git daran hindert, eine Datei zu ändern, wenn es versucht, einen Patch anzuwenden.

Windows neigt dazu, Prozessen exklusiven Zugriff auf Dateien zu gewähren, wenn dies nicht wirklich notwendig sein sollte. In der Vergangenheit waren Virenprüfprogramme eine Quelle des Verdachts, aber ich habe dies nie schlüssig beweisen können.

Am einfachsten ist es wahrscheinlich, den Vorgang abzubrechen und es noch einmal zu versuchen, in der Hoffnung, dass es beim nächsten Mal nicht mehr passiert.

git rebase --abort

Sie können versuchen, die git apply und das Wissen darüber, was Git eigentlich tun wollte, bevor es eine git rebase --continue aber ehrlich gesagt, würde ich das nicht empfehlen. Bei den meisten Versuchen, die ich gesehen habe, war die Wahrscheinlichkeit, dass etwas versehentlich übersehen oder verwechselt wurde, größer als gleichmäßig.

24voto

Mike Ruhlin Punkte 3476

Wenn ich dies auf meinem Rechner sehe, ist es schlimmer als nur die Meldung "irgendein Prozess hat die Datei geöffnet". Der tatsächliche Besitz der Datei wird so weit verändert, dass ich (als Administrator) nur noch nach einem Neustart auf die Datei zugreifen kann.

Soweit ich das beurteilen kann, ist IIS Teil des Problems. Wenn ich zwischen zwei großen Zweigen wechsle, bei denen viele Dateien geändert werden müssen, löscht Git eine Datei oder ein Verzeichnis (in der Regel DLLs), während der IIS versucht, etwas anderes damit zu tun. An diesem Punkt überschreibt der IIS-Prozess die Datei auf der Festplatte automatisch mit einer Version, die gesperrt ist und niemandem zu gehören scheint.

Das Beenden von IIS an dieser Stelle ist nicht zielführend. Das Beste, was ich herausgefunden habe, ist ein Neustart, und denken Sie daran, IIS zu stoppen, bevor Sie in Zukunft über wichtige Zweige ändern.

Ich weiß, das beantwortet die Frage nicht wirklich, könnte aber für andere hilfreich sein.

22voto

Muhammed Moussa Punkte 3282

Wenn Sie vscode verwenden, beenden Sie das Terminal und öffnen Sie ein neues. sonst vielleicht auch Terminal schließen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X