Ich benutze Git und habe ein kleines Commit gemacht, gefolgt von einem großen. Ich beschloss, git rebase
die beiden Commits zusammenzudrücken, bevor ich sie drückte. (Ich habe das noch nie zuvor gemacht.)
So tat ich:
git rebase -i HEAD~2
Dies gab mir meinen Editor, wo ich mich entschied, das frühere Commit auszuwählen und das spätere zu quetschen. Als ich rettete, sagte Git:
Fehler: ' Dateiname ' kann nicht angegeben werden : Berechtigung verweigert
Sha1 konnte für späteres Festschreiben nicht angewendet werden ... erste Textzeile für dieses Festschreiben
Jetzt:
- Kein Commit wird angezeigt, wenn ich es tue
git log
. 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 verfolgt aufgeführt. Mein erstes Commit hatte nur eine Datei (glaube ich) und mein zweites Commit hatte ein gutes Dutzend.
Was ist passiert!? Wie behebe ich das?
git
git-rebase
Ryan Lundy
quelle
quelle
Antworten:
Ich habe diesen Fehler bisher nur unter Windows gesehen und es scheint zu bedeuten, dass etwas Git daran gehindert hat, eine Datei zu ändern, als es versuchte, einen Patch anzuwenden.
Windows neigt dazu, Prozessen exklusiven Zugriff auf Dateien zu gewähren, wenn dies eigentlich nicht erforderlich sein sollte. In der Vergangenheit waren Virenprüfer eine Quelle des Verdachts, aber ich habe dies nie endgültig bewiesen.
Wahrscheinlich ist es am einfachsten, abzubrechen und es erneut zu versuchen, in der Hoffnung, dass es beim nächsten Mal nicht passiert.
Sie können versuchen, zu verwenden
git apply
und zu wissen, was Commit Git tatsächlich versucht hat, bevor Sie ein tun,git rebase --continue
aber ehrlich gesagt würde ich dies nicht empfehlen. Die meisten Male, in denen ich dies versucht habe, gab es eine bessere als die gleiche Chance, dass etwas versehentlich übersehen oder durcheinander gebracht wird.quelle
git checkout -- previously-locked-file
sein, wieder einsatzbereit zu sein.git checkout
ich die Datei zurückholen (git status
darin wurde sie gelöscht), und jetzt ist alles wieder so, wie es war, bevor ich versucht habe, neu zu gründen / zu quetschen. Vielleicht sollte ich es noch einmal versuchen, obwohl ich mich an dieser Stelle etwas unwohl fühle.Schließen Sie alle Programme, in denen der Ordner geöffnet ist, z. B. Editoren, Explorer-Fenster, Eingabeaufforderungen und FTP-Programme. Dies behebt immer das Problem für mich unter Windows.
quelle
Schließen Sie einfach Ihre IDE (VISUAL STUDIO / ATOM usw.). Es könnte gehen
quelle
Wenn ich dies auf meinem Computer sehe, ist es schlimmer als nur "ein Prozess hat die Datei geöffnet". Der tatsächliche Besitz der Datei wird bis zu dem Punkt aufgebockt, an dem ich (als Administrator) erst nach einem Neustart darauf zugreifen kann.
Soweit ich das beurteilen kann, ist IIS Teil des Problems. Wenn ich zwischen zwei Hauptzweigen wechsle, für deren Änderung viele Dateien erforderlich sind, löscht git eine Datei oder ein Verzeichnis (normalerweise DLLs), während IIS versucht, etwas damit zu tun. Zu diesem Zeitpunkt überschreibt der IIS-Prozess die Datei auf der Festplatte automatisch mit einer Version, die gesperrt ist und anscheinend niemandem gehört.
Das Anhalten von IIS an dieser Stelle reicht nicht aus. Das Beste, was ich herausgefunden habe, ist ein Neustart. Denken Sie daran, IIS zu stoppen, bevor Sie in Zukunft zwischen wichtigen Zweigen wechseln.
Ich weiß, dass das die Frage nicht wirklich beantwortet, aber für andere hilfreich sein könnte.
quelle
iisreset
scheint ein Quick die Dateisperren aufzuheben.iisreset
Lösung nicht getestet .Unter Windows kann es sich um einen TortoiseGIT-Prozess handeln, der diese Dateien blockiert. Öffnen Sie den Task-Manager und beenden Sie den Prozess TGitCache.exe .
quelle
Ich bin gerade auf diesen Thread von Antworten gestoßen - dieser Fehler ist so ein falscher Fehler. # Fehler: Kann nicht 'reddit / app / views / links' angeben: Berechtigung verweigert
Das ist alles, was ich habe - beim Versuch zu verschmelzen. Ich las einige der Antworten und kam dann zu der Erkenntnis - alles, was ich tun musste, war meinen Code-Editor zu schließen, der zufällig Atom ist.
Nach dem Schließen des Editors habe ich "git merge" erneut ausgeführt und boomte, es hat funktioniert.
Was für ein sinnloser Fehler :(
quelle
Wenn Sie vscode verwenden, beenden Sie das Terminal und öffnen Sie ein neues. sonst vielleicht auch Terminal schließen
quelle
Das passiert mir gelegentlich unter Windows
Meistens habe ich mehrere Instanzen von Bit Bash geöffnet, und eine der Git Bash-Instanzen befindet sich in einem Verzeichnis, das in dem Remote-Zweig, aus dem ich ziehe, nicht vorhanden ist.
Das Schließen aller bis auf eine Instanz von Git Bash löst das Problem für mich.
quelle
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.
quelle
Mit SourceTree in Win 10 wurde das Problem durch Schließen des Atom-Editors behoben.
Fehler beim Reproduzieren:
quelle
Dies kann auch passieren, wenn Sie SublimeText verwenden und das Popup-Fenster, in dem Sie zum Kauf des Programms aufgefordert werden, nicht geschlossen ist.
quelle
Dies ist häufig der Fall, wenn Sie Vorverarbeitungssoftware / -anwendungen haben, die das Projekt beobachten, z. B. Prepros oder Codekit. Atom und Sublime (und sogar Notepad ++) können dies auch verursachen, wenn eine Datei im Projekt gerade bearbeitet wird.
Der einfachste Weg, um das Problem zu umgehen, besteht darin, alle geöffneten Projektdateien zu schließen, Ihre Zweige zusammenzuführen und sie dann erneut zu öffnen, um sie zu aktualisieren. Auf diese Weise werden auch Probleme vermieden, bei denen das Programm keine Änderungen mehr bemerkt und Sie gezwungen sind, die Projekte manuell zu aktualisieren.
quelle
Wenn Sie Webpack ausführen, fahren Sie es herunter. Fahren Sie auch Ihre IDE herunter. Sollte gut funktionieren, nachdem Sie diese Dinge getan haben.
quelle
Ich hatte ein ähnliches Problem. Aber es war 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 Schließen des Datei-Explorers wurde das Problem behoben.
quelle
Ich hatte dies gerade unter Win 7.
$ git stash pop error: Status 'parentFolder / subfolder' kann nicht angegeben werden: Berechtigung verweigert Fehler: Status 'parentFolder / subfolder' kann nicht angegeben werden: Berechtigung verweigert
Diagnose:
1> Ich bin in den Unterordner gegangen und er ist da und konnte ihn nicht löschen!
2> Verwenden Sie "Prozess-Explorer" -> Suchen -> Handles und DLLs suchen -> geben Sie dort den Namen "Unterordner" ein und suchen Sie.
Ergebnis: Es stellt sich heraus, dass XMLSpy dort eine der XML-Dateien geöffnet hat, XML Spy schließt und Stash Pop erneut versucht. Es funktioniert jetzt.
quelle
Ist mir unter Windows passiert, als ich das integrierte IntelliJ-Terminal neu aufgebaut habe . Ich habe festgestellt, dass die Git-Bash- Client-Instanz parallel ausgeführt wurde.
Das Schließen von Git Bash löste das Problem.
quelle
Meine Begegnung mit diesem Problem wurde von meinem Redakteur Intellij verursacht. Als Teil seiner internen Versionskontrollen hatte es alle versteckten Git-Dateien durchlaufen und gesperrt. (Aus verschiedenen Gründen habe ich das mit Intellij gelieferte Git-Plugin nicht verwendet ...)
Also habe ich als Administrator ein normales Dos-Fenster geöffnet, in das Verzeichnis gewechselt und ausgeführt
Dadurch wurde die Sperre für die Dateien aufgehoben und alles funktionierte danach. Ich konnte meine Änderungen mit dem GitHub-Windows-Client synchronisieren.
quelle
Ich stimme den obigen Antworten zu "Visual Studio schließen" zu.
Ein zusätzlicher Schritt Allerdings hatte ich auch zu tun , nachdem ich geschlossene Visual Studio hatte , war manuell den töten „Devenv.exe“ Visual Studio - Prozess im Task Explorer. Nachdem ich dies getan hatte, konnte ich wieder in gitbash laufen:
und der Fehler " Dateiname kann nicht angegeben werden " ist verschwunden. Möglicherweise liegt es an einer Visual Studio-Erweiterung, die den Prozess auch nach dem Schließen länger offen hält.
quelle
Ich hatte gerade dieses Problem. Die Sache ist - wenn Sie eine Datei geöffnet haben, die nach dem 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, in einem anderen Zweig auszuchecken
quelle
Eine alternative Lösung, anstatt alle Apps zu schließen, die das Verzeichnis möglicherweise sperren, wie es fast jede andere Antwort vorschreibt, wäre die Verwendung eines Dienstprogramms, das die Dateien / das Verzeichnis entsperrt, ohne alles zu schließen. (Ich hasse es, Visual Studio neu starten zu müssen)
LockHunter ist das, was ich benutze: https://lockhunter.com/ Es gibt wahrscheinlich auch andere da draußen, aber dieses hat für mich großartig funktioniert.
quelle
Gleiches Problem unter Windows 10 64 Bit unter Git Bash Version 2.9.0.windows1 Verwenden von Atom als Editor.
Dies funktionierte für mich: Ich habe den Git-Softwareordner (für mich war dies C: \ Programme \ Git) zu den Ausschlüssen für Windows Defender hinzugefügt.
Nachdem der Ausschluss hinzugefügt wurde,
git checkout 'file'
funktionierte gut.quelle
Dieser Fehler kann auch durch die Tatsache verursacht werden, dass Dateien aufgrund vorheriger Git-Aktionen immer noch "gesperrt" sind. Dies hängt damit zusammen, wie die Windows-Dateisystemschicht funktioniert. Ich habe einmal eine nette Erklärung dazu gelesen, kann mich aber nicht erinnern, wo.
In diesem Fall müssen Sie jedoch Ihren unterbrochenen Rebase-Prozess fortsetzen , da es sich im Grunde genommen um eine Race-Bedingung handelt . Leider passiert mir das die ganze Zeit, deshalb habe ich diesen kleinen gefährlichen Helfer geschrieben, um meine Rebases am Laufen zu halten:
Wenn Sie besonders sicher sein möchten, können Sie
git rebase --edit-todo
überprüfen, ob das nächste anzuwendende Commit tatsächlich dasjenige ist, das zuvor nicht angewendet wurde. Verwendengit clean -dn
Sie diese Option , um sicherzustellen, dass Sie keine wichtigen Dateien löschen.quelle
Ist mir in Windows passiert, wenn ich Photoshop verwendet habe: Als ich ein Bild gespeichert und dann zu einem Zweig gewechselt habe (Photoshop mit geöffnetem Bild verlassen), habe ich den Git-Fehler erhalten. Schließen Sie das Bild in Photoshop und versuchen Sie es erneut
quelle
Wenn Sie das Meld-Merge-Tool geöffnet haben, schließen Sie es. Es blockiert das Überschreiben von Dateien.
quelle
Das Beenden des Prozesses w3wp.exe im Zusammenhang mit dem Repository hat dies für mich behoben.
quelle
In meinem Fall lief ein Webpack-Entwicklungsserver hinterher.
quelle
Ich habe diesen Fehler erhalten, als sich mein VS1013 in einem Zweig mit dem Ziel 8.1 befand und ich versuchte, einen 8.0-Zweig auszuchecken. Ich musste zu VS zurückkehren und UpdateAll zulassen. Dann konnte ich den 8.0-Zweig fehlerfrei auschecken.
quelle
Ich war auch auf einem Windows-Computer mit Git Shell, als ich auf den gleichen Fehler stieß.
Zu der Zeit hatte ich jedoch mehrere Git-Terminals geöffnet.
Das erste Terminal hat den Fehler erhalten, den Sie oben gepostet haben, und das andere Terminal hat zuvor den Fehler ausgeführt
grunt serve
Terminalbefehl von yeoman (unten verlinkt) ausgeführt. Das zweite Terminal musste geöffnet bleiben, um eine lokale Serverinstanz zu hosten.Das Herunterfahren aller Terminalfenster, in denen laufende Prozesse ausgeführt werden, kann dazu führen, dass der Fehler behoben wird.
Zumindest hat das bei mir funktioniert. Nachdem ich das zweite Terminalfenster geschlossen hatte, konnte ich problemlos verschiedene Zweige auschecken und Dateien bearbeiten.
Grunt Serve Command - Yeoman.I / O
http://yeoman.io/learning/
quelle
Ich bin gerade auf dieses Problem gestoßen. Keine der Antworten hier hat dies für mich gelöst.
Am Ende waren es Nuget-Pakete, die ich in einem Zweig hinzugefügt habe, der nach dem Zurückschalten auf den Hauptzweig nicht zu existieren schien. Sobald ich eine Zusammenführung durchgeführt habe, würde es heißen, Newton ... xml konnte nicht stat. Ich würde zu der fraglichen Datei gehen und sie öffnen, aber Windows gab einen Fehler zurück, der besagte, dass die Datei nicht gefunden werden kann (obwohl ich sie mir genau angesehen habe).
Wie ich das gelöst habe, war ein Rechtsklick auf die Datei löschen (was funktioniert hat, aber ich konnte sie nicht öffnen, weil Windows sie nicht finden konnte ???) und versuchen, sie erneut zusammenzuführen, und das Problem wurde behoben.
Sehr eigenartig.
Hoffe das hilft später jemandem.
quelle
Ich verließ meinen Texteditor, der auf die Projektverzeichnisse zugegriffen hatte, und versuchte dann, ihn mit dem Hauptzweig zusammenzuführen, und es funktionierte.
quelle