webentwicklung-frage-antwort-db.com.de

git rebase: "Fehler: Stat 'Datei' kann nicht: Berechtigung abgelehnt werden"

Ich benutze git und habe ein kleines Commit gemacht, gefolgt von einem großen. Ich entschied mich dafür, git rebase zu verwenden, um die beiden Commits zusammenzudrücken, bevor ich sie schiebe. (Ich habe das noch nie zuvor gemacht.)

So tat ich:

git rebase -i HEAD~2

Dies gab mir meinen Editor, wo ich mich für das frühere Commit entschied und das spätere Squash zerquetschte. Als ich gerettet habe, sagte git:

fehler: Stat ' Dateiname ' kann nicht: Berechtigung abgelehnt

sha1 konnte für späteres Commit nicht angewendet werden ... Anfangszeile des Texts für dieses Commit

Jetzt:

  • Kein Commit erscheint, wenn ich git log mache.
  • git status sagt mir, dass ich derzeit in keinem Zweig bin.
  • Eine Datei wird als geändert und im Index aufgeführt, und zwei Dateien werden als nicht protokolliert aufgeführt. Mein erster Commit hatte nur eine Datei (glaube ich) und mein zweiter Commit hatte ein gutes Dutzend.

Was ist passiert!? Wie kann ich das beheben?

267
Ryan Lundy

Ich habe diesen Fehler nur unter Windows gesehen, und es scheint so zu sein, dass etwas blockiert wurde, als er versuchte, eine Datei zu ändern, als versucht wurde, einen Patch anzuwenden.

Windows neigt dazu, Prozessen exklusiven Zugriff auf Dateien zu gewähren, wenn dies nicht unbedingt erforderlich sein sollte. In der Vergangenheit waren Virenprüfgeräte eine Quelle des Verdachts, aber ich habe dies nie schlüssig bewiesen.

Wahrscheinlich ist es am einfachsten, abzubrechen und es erneut zu versuchen, in der Hoffnung, dass es beim nächsten Mal nicht passiert.

git rebase --abort

Sie können versuchen, git apply und das Wissen darüber zu verwenden, was Commit git eigentlich vor einem git rebase --continue versucht hat, aber ehrlich gesagt würde ich das nicht empfehlen. In den meisten Fällen, in denen ich es versucht habe, gab es eine bessere Chance, als etwas aus Versehen zu versäumen oder zu versauen.

159
CB Bailey

Schließen Sie alle Programme, die den Ordner geöffnet haben, wie Editoren, Explorer-Fenster, Eingabeaufforderungen und FTP-Programme. Dies behebt immer das Problem für mich unter Windows.

515
Cameron Wright

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

228
ManJan

Wenn ich das auf meinem Computer sehe, ist es schlimmer als nur ein Prozess, bei dem die Datei geöffnet ist. Der tatsächliche Besitz der Datei wird bis zu dem Punkt angehoben, an dem ich (als Administrator ausgeführt) nur nach dem Neustart darauf zugreifen kann.

Am nächsten kann ich sagen, IIS ist Teil des Problems. Wenn ich zwischen zwei Hauptzweigen wechsle, für die viele Dateien geändert werden müssen, löscht git eine Datei oder ein Verzeichnis (normalerweise DLLs), während IIS versucht, etwas oder ein anderes damit zu tun. Zu diesem Zeitpunkt überschreibt der Prozess IIS die Datei auf der Festplatte automatisch mit einer Version, die gesperrt ist und scheinbar niemandem gehört.

Wenn Sie an dieser Stelle IIS stoppen, wird dies nicht ausgeführt. Am besten habe ich herausgefunden, dass Sie einen Neustart durchführen müssen, und denken Sie daran, IIS zu stoppen, bevor Sie in Zukunft die wichtigsten Zweigstellen wechseln.

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

21
Mike Ruhlin

Ich bin gerade über diesen Thread von Antworten gestolpert - dieser Fehler ist ein solcher Bogus-Fehler. # Fehler: Kann nicht 'reddit/app/views/links' stat: Berechtigung verweigert

Das ist alles, was ich habe - beim Zusammenführen. Ich las ein paar Antworten und kam dann zur Erkenntnis - ich musste nur meinen Code-Editor schließen, der zufällig Atom ist.

Sobald der Editor geschlossen wurde - habe ich "git merge" wieder ausgeführt und boom, es hat funktioniert.

Was für ein sinnloser Fehler :(

13
TheyDontHaveIT

Unter Windows kann es sich um einen TortoiseGIT-Prozess handeln, der diese Dateien blockiert. Taskmanager öffnen und Prozess beenden TGitCache.exe

12
romanlv

Dies kann auch passieren, wenn Sie SublimeText verwenden und das Popup-Fenster, das Sie zum Kauf des Programms auffordert, nicht geschlossen wird.

6
ahnbizcad

Wenn die von Ihnen verwendete IDE (falls Sie eine verwenden) möglicherweise ebenfalls im Weg war Das ist mir bei der Verwendung von QtCreator passiert.

5
rgngl

Dies ist häufig der Fall, wenn Sie Software/Anwendungen vorverarbeiten, die das Projekt überwachen, z. B. Prepros oder Codekit. Auch Atom und Sublime (und sogar Notepad ++) können dazu führen, dass eine Datei im Projekt gerade bearbeitet wird.

Das Problem lässt sich am einfachsten mit dem Schließen der Projektdateien schließen, die Zweige zusammenführen und dann zum Aktualisieren erneut öffnen. Dadurch werden auch Probleme vermieden, bei denen das Programm die aufgetretenen Änderungen nicht mehr kennt und Sie das Projekt bzw. die Projekte manuell aktualisieren müssen.

5

Das passiert mir gelegentlich in Windows

fehler: Stat 'Dateiname' kann nicht angegeben werden: Berechtigung verweigert

Meistens habe ich mehrere Instanzen von bit-bash geöffnet, und eine der git-bash-Instanzen befindet sich in einem Verzeichnis, das nicht im Remote-Zweig vorhanden ist, aus dem ich abziehe.

Das Schließen aller bis auf eine Instanz von Git-Bash löst das Problem für mich.

4
Crispy Ninja

Ich hatte das gerade unter Win 7.

$ git stash pop Fehler: Stat 'parentFolder/subfolder' kann nicht stat: Berechtigung abgelehnt Fehler: 'parentFolder/Unterordner' kann nicht stat: Berechtigung verweigert

Diagnose:

1> Ich ging in den Unterordner und es ist dort und ich konnte es nicht löschen!

2> Verwenden Sie "Process Explorer" -> Find -> Find Handles und Dlls -> geben Sie den Namen "Unterordner" ein und suchen Sie.

Ergebnis: Es stellt sich heraus, dass XMLSpy eine der XML-Dateien geöffnet hat, XML Spy schließen und Stash-Pop erneut versuchen. Jetzt funktioniert es.

4
Gob00st

Mit SourceTree in Win 10 wurde das Problem behoben, indem der Atom-Editor geschlossen wurde.

Fehler reproduzieren:

  1. Erstellen Sie in Zweig B eine MD-Datei, bearbeiten und speichern Sie sie mit Atom.
  2. Wechseln Sie zu Zweig A, und ziehen Sie neue Commits vom Server herunter.
  3. Versuchen Sie, zurückzuschalten, Opps, es wird angezeigt: "Fehler: Kann keine stat 'Datei': Berechtigung abgelehnt".
4
attolee

Ich hatte ein ähnliches Problem. Es war jedoch sehr einfach zu lösen. Auf einem Windows-Computer hatte mein Datei-Explorer einen Ordner geöffnet, der in einem Zweig vorhanden war, aber nicht in dem anderen, den ich ausgecheckt habe. Durch das Schließen des Datei-Explorers wurde das Problem behoben.

4
mmmdearte

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

3
Muhammed Moussa

Ich hatte gerade dieses Problem. Die Sache ist - wenn Sie eine Datei geöffnet hatten, die nach Rebase entfernt\ersetzt wurde (Sie hatten einen Zweig, der diese Datei nicht mehr hat), beschädigt das Git-System. Also habe ich alle geöffneten Dateien geschlossen und dann versucht, einen anderen Zweig zu checken

2
BlondinkaBrain

Ich stimme den oben genannten Antworten "Close Visual Studio" zu. 

Ein zusätzlicher Schritt, den ich auch nach dem Schließen von Visual Studio ausführen musste, war das manuelle Anlegen von kill the"devenv.exe" Visual Studio-Prozess im Task-Explorer ..__ Ich hatte das getan, ich konnte wieder in Gitbash laufen:

git ziehen

und der Fehler "can stat filename" ist verschwunden. Möglicherweise liegt es daran, dass die Erweiterung von Visual Studio den Prozess auch nach dem Schließen länger geöffnet hält.

2
ladygargar

Meine Begegnung mit diesem Problem wurde von meinem Herausgeber, Intellij, verursacht. Als Teil der internen Versionskontrollen wurden alle versteckten Git-Dateien gesperrt. (Aus verschiedenen Gründen habe ich nicht das Git-Plugin verwendet, das mit Intellij geliefert wird ...) 

Also habe ich als Administrator ein normales DOS-Fenster geöffnet, in das Verzeichnis gewechselt und ausgeführt

attrib -R /S

Dadurch wurde die Sperre für die Dateien aufgehoben und alles funktionierte danach und ich konnte meine Änderungen mit dem GitHub-Windows-Client synchronisieren.

2
Perry Tew

Dieser Fehler kann auch durch die Tatsache verursacht werden, dass Dateien aufgrund früherer git-Aktionen immer noch gesperrt sind. Es hat mit der Funktionsweise der Windows-Dateisystemebene zu tun. Ich habe einmal eine schöne Erklärung dazu gelesen, aber ich kann mich nicht erinnern, wo.

In diesem Fall müssen Sie jedoch, da es sich im Wesentlichen um eine Race-Bedingung handelt, den unterbrochenen Rebase-Prozess fortsetzen fortsetzen. Leider passiert mir das immer wieder, deshalb schrieb ich diesen kleinen gefährlichen Helfer, um meine Rebazien am Laufen zu halten:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

Wenn Sie besonders sicher sein möchten, können Sie mit git rebase --edit-todo überprüfen, ob das nächste zu verwendende Commit wirklich das ist, das zuvor nicht angewendet wurde. Verwenden Sie git clean -dn, um sicherzustellen, dass Sie keine wichtigen Dateien löschen.

1
raphinesse

Gleiches Problem unter Windows 10 64 Bit unter Git Bash Version 2.9.0.windows1 Verwendung von Atom als Editor.

Dies funktionierte für mich: Ich habe den Git-Softwareordner (für mich C:\Programme\Git) zu den Ausschlüssen für Windows Defender hinzugefügt.

Nachdem der Ausschluss hinzugefügt wurde, funktionierte git checkout 'file' einwandfrei.

1
Paul Spaven

Wenn Sie Webpack ausführen, fahren Sie es herunter. Fahren Sie auch Ihre IDE herunter. Sollte gut funktionieren, nachdem Sie diese Dinge getan haben.

1
KennethDale1

Wenn ich in Windows mit Photoshop gearbeitet habe: Wenn ich ein Bild gespeichert habe und dann zu einem Zweig gewechselt bin (Photoshop mit geöffnetem Bild belassen) habe ich den Git-Fehler erhalten. Schließen Sie das Bild in Photoshop und versuchen Sie es erneut

1
P.Scheit

Das Beenden des w3wp.exe-Prozesses, der sich auf das Repository bezieht, hat dies für mich behoben.

1
Ric

Wenn Sie das Meld-Zusammenführungswerkzeug open haben, schließen Sie das. Es blockiert das Überschreiben der Datei.

1
user2441511

Unter Windows kam es mir beim Umbasieren in IntelliJ integriertes Terminal..__ zu. Ich bemerkte, dass ich Git bashClient-Instanz parallel ausgeführt hatte.

Das Schließen von Git bash löste das Problem.

0
Louis

Eine alternative Lösung, anstatt alle Apps zu schließen, die das Verzeichnis sperren könnten, wie es bei fast jeder anderen Antwort der Fall ist, wäre ein Dienstprogramm, das die Dateien/Verzeichnisse entsperrt, ohne alles zu schließen. (Ich hasse es, Visual Studio neu zu starten)

LockHunter ist derjenige, den ich benutze: https://lockhunter.com/ Es gibt wahrscheinlich auch andere, aber dieser hat für mich großartig funktioniert.

0
HotN

Ich bin gerade auf dieses Problem gestoßen. Keine der Antworten hier ist zufällig für mich gelöst worden. 

Am Ende waren es Nuget-Pakete, die ich in einem Zweig hinzufügte, der nach dem Wechsel zum Hauptzweig nicht mehr existierte. Sobald ich eine Zusammenführung gemacht habe, würde man sagen, Newtonsoft ... xml konnte nicht stat. Ich würde zu der fraglichen Datei gehen und sie öffnen, aber Windows hat einen Fehler zurückgeschickt, der besagt, dass die Datei nicht gefunden werden kann (obwohl ich sie richtig angesehen habe).

Wie ich das gelöst habe, war ein Rechtsklick, löschte die Datei (was funktionierte, aber ich konnte sie nicht öffnen, weil Windows sie nicht finden konnte ???) und versuchte erneut zusammenzuführen und das Problem zu lösen. 

Sehr eigenartig.

Hoffe das hilft später jemandem.

0
TheNoob

Ich war auch auf einem Windows-Computer mit Git Shell, als derselbe Fehler aufgetreten ist.

Zu der Zeit hatte ich jedoch mehrere Git-Terminals geöffnet.

Das erste Terminal hat den Fehler erhalten, über den Sie oben informiert haben, und das andere Terminal hatte zuvor den Befehl grunt serve terminal von yeoman (unten verlinkt) ausgeführt. Das zweite Terminal musste offen bleiben, um eine lokale Serverinstanz zu hosten.

Wenn alle laufenden Fenster des Terminals heruntergefahren werden, kann der Fehler behoben werden.

Zumindest hat das bei mir funktioniert. Nachdem ich das zweite Terminalfenster heruntergefahren hatte, konnte ich problemlos verschiedene Zweige überprüfen und Dateien bearbeiten.

Grunt Serve Command - Yeoman.I/O
http://yeoman.io/learning/

0
Shawesome

Wir haben Berechtigungsprobleme gelöst, indem Sie mit der rechten Maustaste auf sh.exe in den Programmdateien klicken und auf der Registerkarte "Sicherheit" die Option "Als Administrator ausführen" festlegen.

0
o_o

In meinem Fall handelt es sich bei der Datei um ein Shell-Skript (*.sh-Datei), das dazu bestimmt ist, unser Projekt auf einem lokalen Entwicklungsserver für meine Entwickler bereitzustellen.

Das Shell-Skript sollte beständig funktionieren und möglicherweise aktualisiert werden. Also habe ich es in demselben Git-Projekt nachverfolgt wie der Code, den das Skript bereitstellen soll.

Das Shell-Skript führt eine ausführbare Datei aus und ermöglicht dann die Ausführung dieser ausführbaren Datei. das Skript läuft also noch; so hat meine Shell noch das Skript geöffnet; also ist es gesperrt.

Ich Ctrl+C 'wollte das Skript beenden (also ist mein lokaler dev-Server nicht mehr erreichbar), jetzt kann ich frei auschecken.

0
The Red Pea

Ich verließ meinen Texteditor, der auf die Projektverzeichnisse zugegriffen hatte, und versuchte dann, den Master-Zweig zusammenzuführen, und es funktionierte.

0
PudparK

In meinem Fall hatte ich einen Webpack-Dev-Server.

0
Charith

Gleiches Problem, jedoch mit SourceTree (oder einem anderen git-Client). Ich füge meine Antwort hinzu, da keine der Antworten meinem Fall entspricht.

Wenn Sie den Zweig von "Entwickeln" in "Hauptordner" ändern, werden die tatsächlichen Dateien und Unterordner Ihres lokalen Ordners geändert. Es kann vorkommen, dass ein Ordner, der nicht im "Master" vorhanden ist, nicht vollständig gelöscht wird und Windows der Meinung ist, dass Sie nur Ihre Zugriffsrechte verloren haben (selbst wenn Sie der Administrator sind). Beim Zusammenführen von main zur Entwicklung versucht der git-Client, auf den Ordner zuzugreifen. Ohne Zugriffsrechte wird der erwähnte Fehler zurückgegeben.

  • Wenn Sie von einem Zweig auf den neuesten Stand wechseln, kann das Problem behoben werden, und dann Zurück zum Master (überprüfen Sie, ob die Ordner/Dateien tatsächlich Lokal gelöscht wurden). 
  • Schließen des Clients und/oder Ihres Editors behebt das Problem nicht!  
  • Reboot hilft, ist aber Zeitverschwendung (IMHO)
0
Wli

Ich habe diese Fehlermeldung erhalten, als sich mein VS1013 auf einem Zweig mit 8.1 befand und versuchte, einen 8.0-Zweig zu überprüfen. Ich musste zurück zu VS wechseln und UpdateAll zulassen. Dann konnte ich die 8.0-Filiale ohne Fehler auschecken.

0