git rebase: „błąd: nie można stat„ plik ”: Odmowa uprawnień”


342

Używam git i dokonałem małego zatwierdzenia, a następnie dużego. Zdecydowałem się użyć git rebasedo zmiażdżenia dwóch commits razem przed ich wypchnięciem. (Nigdy tego nie robiłem.)

Więc zrobiłem:

git rebase -i HEAD~2

To dało mi mojego edytora, w którym wybrałem wcześniejsze zatwierdzenie i zgniecenie późniejszego. Kiedy uratowałem, git powiedział:

błąd: nie można stat „ nazwa pliku ”: odmowa dostępu

Nie można zastosować sha1 do późniejszego zatwierdzenia ... początkowy wiersz tekstu dla tego zatwierdzenia

Teraz:

  • Żadne zatwierdzenie nie pojawia się, kiedy to robię git log.
  • git status mówi mi, że „Obecnie nie jestem w żadnej branży”.
  • Jeden plik jest wymieniony jako zmodyfikowany i w indeksie, a dwa pliki są wymienione jako nieśledzone. Moje pierwsze zatwierdzenie miało tylko jeden plik (tak mi się wydaje), a moje drugie zatwierdzenie miało dobry tuzin.

Co się stało!? Jak to naprawić?


10
Czy przypadkowo używasz git na Windowsie?
CB Bailey,

Tak. Uruchamiam polecenia w oknie DOS.
Ryan Lundy

2
Czy korzystasz z programu antywirusowego? Czasami problemy ze sprawdzaniem wirusów niskiej jakości powodują takie problemy.
Greg Hewgill,

53
Miałem problem z kasą git (więc nie można przerwać, jak sugeruje zaakceptowana odpowiedź), ale zamknięcie wszystkich moich IDE przepuściło mnie. Druga odpowiedź powinna być zaakceptowana
plus

1
@IanGrainger, odpowiedź, o której mowa, została opublikowana osiem miesięcy po zaakceptowanej odpowiedzi. Czy muszę przychodzić i odwiedzać wszystkie moje pytania co kilka miesięcy, aby potencjalnie zmienić zaakceptowane odpowiedzi na wszystkie z nich? Przyciski do głosowania są z jakiegoś powodu. Jeśli najbardziej pozytywna odpowiedź pomaga ci bardziej niż odpowiedź zaakceptowana, użyj jej. Kto cię powstrzymuje? Ale zaakceptowałem odpowiedź, którą zrobiłem, ponieważ pomogło mi to i to ja zadałem to pytanie.
Ryan Lundy

Odpowiedzi:


195

Zawsze widziałem ten błąd w systemie Windows i wydaje się, że oznacza to, że coś zablokowało gitowi modyfikowanie pliku w momencie, gdy próbował zastosować łatkę.

Windows zwykle zapewnia procesom wyłączny dostęp do plików, gdy nie jest to naprawdę konieczne, w przeszłości sprawdzanie wirusów było jednym z podejrzeń, ale nigdy nie udowodniłem tego jednoznacznie.

Prawdopodobnie najłatwiej jest przerwać i spróbować ponownie, mając nadzieję, że nie zdarzy się to następnym razem.

git rebase --abort

Możesz spróbować użyć git applyi wiedzieć, co faktycznie próbował zrobić git, zanim zrobiłeś, git rebase --continueale szczerze mówiąc nie poleciłbym tego. Przez większość czasu, gdy widziałem, jak to próbowałem, istniała większa niż kiedykolwiek szansa, że ​​coś zostanie przypadkowo pominięte lub pomieszane.


6
@ Kyralessa: Hmmm, próbowałeś zrestartować komputer? Jeśli coś ciągle blokuje ten plik, to po ponownym uruchomieniu (lub czymś nieco mniej drastycznym, który uwalnia plik), powinieneś być w stanie to zrobić git checkout -- previously-locked-filei być ponownie uruchomiony.
CB Bailey,

51
Cóż, nadal nie jestem pewien, co dokładnie się stało, ale jak najlepiej mogę powiedzieć, VS 2010 blokował plik (dziwne, ponieważ był to plik doc .xml). Process Explorer nie znalazł niczego, co blokowałoby ten plik, ale po wyjściu z VS byłem w stanie użyć go git checkoutdo odzyskania pliku (w git statusnim został usunięty), a teraz wszystko wróciło tak, jak było przed próbą zmiany bazy / squasha. Może powinienem spróbować jeszcze raz, choć w tym momencie czuję się trochę nieswojo.
Ryan Lundy

3
Kontynuacja, wiele księżyców później: nie miałem tego problemu ponownie. Rebasing działał dobrze, w tym nawet interaktywny rebasing. To musiała być chwilowa usterka blokująca pliki VS.
Ryan Lundy,

49
Zamknięcie programu Visual Studio 2010 naprawiło to również dla mnie
Trev

4
Atom najwyraźniej również blokuje pliki. Ponowne uruchomienie naprawiło to.
Augustin Bralley,

653

Spróbuj zamknąć wszystkie programy, które mają otwarty folder, takie jak edytory, okna eksploratora, monity poleceń i programy FTP. To zawsze rozwiązuje problem dla mnie w systemie Windows.


72
Otrzymywałem ten sam błąd. Właśnie zamknąłem studio wizualne i wszystko działało.
jacobsimeon

6
Zamknąłem prawie wszystko, co mogłem wymyślić, zanim przypomniałem sobie ukryty w tle konwerter BEZ WINLESS -> CSS.
Michael Martin-Smucker,

6
Program Visual Studio trzymał blokadę na pakiecie nuget, gdy próbowałem scalić. Zamykanie VS działało dla mnie.
CodeHxr

7
Najczęstszym źródłem tego błędu, który widziałem w systemie Windows, jest blokowanie plików przez Visual Studio. Zgodnie z zaleceniami zamknij VS przed zmianą gałęzi, scaleniem itp.
longda

5
Odpowiedź „ja też” dla Atom. Wydaje się, że blokuje pliki i katalogi; zamknięcie go rozwiązuje problem.
ajm

277

Wystarczy zamknąć IDE (VISUAL STUDIO / ATOM itp.). To może zadziałać


1
W IntelliJ zatrzymanie działającej usługi Tomcat działało dla mnie. Nieco łatwiejsze niż ponowne uruchomienie IDE.
Phil Carter

Miałem też otwarte okno Git Bash - zamknięcie, które zadziałało dla mnie.
Vince I

Żadne IDE warte swojej soli nie powinno blokować niczego w repo ... kciuki do góry !!
LightCC

Po rozwiązaniu problemu w tymczasowym oddziale za pomocą Atom w systemie Windows 10. traf ten problem. Zamknięcie i ponowne otwarcie Atom rozwiązało problem.
mickburkejnr

24

Kiedy widzę to na moim komputerze, jest to gorsze niż tylko „jakiś proces ma otwarty plik”. Rzeczywista własność pliku zostaje podniesiona do tego stopnia, że ​​ja (działając jako administrator) mogę uzyskać do niego dostęp dopiero po ponownym uruchomieniu.

Najbliższe mogę powiedzieć, IIS jest częścią problemu. Jeśli przełączę się między dwiema głównymi gałęziami, które wymagają modyfikacji wielu plików, git usunie plik lub katalog (zwykle biblioteki DLL), podczas gdy IIS próbuje coś z tym zrobić. W tym momencie proces IIS automatycznie zastępuje plik na dysku wersją, która jest zablokowana i wydaje się, że nie jest własnością nikogo.

Zatrzymanie IIS w tym momencie tego nie robi. Najlepsze, co udało mi się zrobić, to zrestartowanie komputera i pamiętaj, aby zatrzymać IIS przed zmianą w głównych oddziałach w przyszłości.

Wiem, że tak naprawdę nie odpowiada na pytanie, ale może być pomocny dla innych.


Cześć, Mike ... mamy dokładnie ten sam problem, ale wyskoczył z miejsca. Używaliśmy tego samego procesu w wielu projektach z uruchomionymi usługami IIS i nigdy nie mieliśmy problemu. Jednak pewnego dnia zaczyna się dziać ... zdumiewające i frustrujące. Czy nauczyłeś się już odkąd to napisałeś?
Ethan Brown,

Dzięki za wgląd Mike - w moim przypadku sprawdzenie starej gałęzi z projektem ASP.NET MVC, która miała inny wiążący adres URL niż poprzednia gałąź, spowodowało, że Visual Studio następnie IIS trzymał blokadę niektórych plików w projekcie. Zatrzymanie odpowiedniej aplikacji w IIS usunęło blokadę.
fundead

IIS było również dla mnie winowajcą; kiedy to się pojawia, szybkie iisresetwydaje się zwolnić blokady plików.
alexm

Przekonałem się, że to samo dzieje się z OneDrive: przełączanie oddziałów w repozytorium przechowywanym w OneDrive naprawdę go myli
CharlieB

Zdarzyło mi się to również na Win10, wymagając ponownego uruchomienia, ale nie przetestowałem iisresetrozwiązania.
qdread

17

W systemie Windows może to być proces TortoiseGIT, który blokuje te pliki. Otwórz menedżera zadań i zakończ proces TGitCache.exe .


2
Dobrze wiedzieć, chociaż w moim przypadku nie używam TortoiseGit; Po prostu używam wiersza polecenia.
Ryan Lundy,

13

Właśnie natknąłem się na ten wątek odpowiedzi - ten błąd to taki fałszywy błąd. # Error: Can Stat 'Reddit / App / Views / Links': Odmowa dostępu

To wszystko, co mam - próbując się połączyć. Przeczytałem kilka odpowiedzi, a potem doszedłem do wniosku - wszystko, co musiałem zrobić, to zamknąć edytor kodu, którym jest Atom.

Po zamknięciu edytora - uruchomiłem ponownie „git merge” i boom, zadziałało.

Co za bezsensowny błąd :(


Dziękuję Ci! Nie codziennie zobaczysz „właściwą” odpowiedź na liście. Polecam to zaznaczyć właściwą odpowiedź. Zamiast przerywać bieżącą operację, sensowne jest rozwiązanie prawdziwego problemu.
Nikhil Kuriakose

12

jeśli używasz vscode, zabij terminal i otwórz nowy. w przeciwnym razie może też zamknąć terminal


To było to, wyglądało jak proces blokujący czy coś takiego
Mike Upjohn,

10

Zdarza mi się to czasami w systemie Windows

błąd: nie można stat „nazwa pliku”: odmowa dostępu

Najczęściej mam otwartą wiele instancji bit bash, a jedna z instancji git bash znajduje się w katalogu, który nie istnieje w zdalnej gałęzi, z której pobieram.

Zamknięcie wszystkich wystąpień git bash oprócz jednego rozwiązuje dla mnie ten problem.


9

Jeśli IDE, którego używasz (w przypadku, gdy go używasz), może również przeszkadzać. Tak stało się ze mną podczas korzystania z QtCreatora.


Tak było ze mną, używając PhpStorm. Ponowne uruchomienie naprawiło błąd.
lancemonotone

7

Za pomocą SourceTree w Win 10 naprawiono problem przez zamknięcie edytora Atom.

Błąd odtwarzania:

  1. W gałęzi B utwórz plik md, za pomocą Atom edytuj go, zapisz i zatwierdź.
  2. Przejdź do gałęzi A, ściągnij nowe commity z serwera.
  3. Spróbuj Przełączyć z powrotem, Opps, mówi „błąd: nie można stat„ plik ”: Odmowa uprawnień”.

6

Może się to również zdarzyć, gdy używasz SublimeText, a okienko wyskakujące z prośbą o zakup programu nie jest zamknięte.


1
Dostałem to również z Atomem po prostu poprzez otwarcie drzewa projektu / pliku
Hal

1
Podobnie jak @Hal, mój problem dotyczył Atom. Było tak, ponieważ folder w jednej gałęzi nie znajdował się w innej gałęzi. Zamknięcie Atom naprawi to, ale możesz także zwinąć drzewo projektu (aby ukryć folder), i to też działa.
jsalwen

6

Zdarza się to często, gdy masz oprogramowanie / aplikacje do wstępnego przetwarzania oglądające projekt, takie jak Prepros lub Codekit. Również Atom i Sublime (a nawet Notepad ++) mogą powodować, że plik w projekcie jest aktualnie edytowany.

Najłatwiejszym sposobem rozwiązania tego problemu jest zamknięcie tego, co ma otwarte pliki projektu, scalenie gałęzi, a następnie ponowne otwarcie ich w celu odświeżenia. Pozwoli to również uniknąć problemów, w przypadku których program nie będzie już świadomy żadnych zmian, które się wydarzyły, zmuszając do ręcznego odświeżenia projektu (projektów).


1
o stary! W tle prowadziłem wiąz na żywo. To zaoszczędziło mi mnóstwo bólu głowy.
frostymarvelous

6

Jeśli korzystasz z webpacka, zamknij go. Zamknij także swoje IDE. Powinien działać dobrze po wykonaniu tych czynności.


4

Miałem podobny problem. Ale rozwiązanie tego problemu było bardzo proste. Na komputerze z systemem Windows mój eksplorator plików miał otwarty folder, który istniał w jednej gałęzi, ale nie w drugiej, którą wypisałem. Zamknięcie Eksploratora plików rozwiązało problem.


4

Właśnie miałem to pod Win 7.

$ git stash pop error: nie można stat 'parentFolder / podfolder': odmowa zezwolenia błąd: nie można stat 'parentFolder / podfolder: odmowa zezwolenia

Diagnoza:

1> Poszedłem do podfolderu i już tam jest i nie mogłem go usunąć!

2> Użyj „eksploratora procesów” -> Znajdź -> Znajdź uchwyty i biblioteki DLL -> wpisz tam nazwę „podfolderu” i wyszukaj.

Wynik: okazuje się, że XMLSpy otworzył tam jeden z plików xml, zamknij XML Spy i spróbuj ponownie ukryć pop, działa teraz.


4

Zdarzyło mi się to w systemie Windows podczas aktualizacji w zintegrowanym terminalu IntelliJ . Zauważyłem, że mam równoległą instancję klienta Git bash .

Zamknięcie Git Bash rozwiązało problem.


2

Moje spotkanie z tym problemem zostało spowodowane przez mojego redaktora, firmę Intellij. W ramach wewnętrznych kontroli wersji przejrzał i zablokował wszystkie ukryte pliki git. (Z różnych powodów nie korzystałem z wtyczki git dostarczanej z Intellij ...)

Więc otworzyłem normalne okno dos jako Administrator, zmieniłem katalog i wykonałem

attrib -R /S

To usunęło blokadę plików i wszystko działało potem i mogłem zsynchronizować moje zmiany za pomocą klienta Windows GitHub.


2

Zgadzam się z powyższymi odpowiedziami „Zamknij Visual Studio”.

Jednak dodatkowym krokiem, który musiałem zrobić, nawet po zamknięciu programu Visual Studio, było ręczne zabicie procesu Visual Studio „devenv.exe” w Eksploratorze zadań. Po wykonaniu tej czynności mogłem ponownie uruchomić w gitbash:

git pull

i zniknął błąd „ nie można stat nazwa pliku ”. Być może wynika to z rozszerzenia Visual Studio, które utrzymuje proces otwarty dłużej nawet po zamknięciu.


2

Właśnie miałem ten problem. Chodzi o to, że jeśli otworzyłeś plik, który został usunięty \ zastąpiony po zmianie bazy (miałeś gałąź, która nie ma już tego pliku), system git psuje się. Więc zamknąłem wszystkie otwarte pliki, a następnie spróbowałem kasy w innym oddziale


2

Alternatywnym rozwiązaniem zamiast zamykania wszystkich aplikacji, które mogą blokować katalog, tak jak w przypadku każdej odpowiedzi, jest użycie narzędzia, które odblokuje pliki / katalog bez zamykania wszystkiego. (Nienawidzę konieczności ponownego uruchamiania programu Visual Studio)

LockHunter jest tym, którego używam: https://lockhunter.com/ Prawdopodobnie są też inni, ale ten zadziałał dla mnie świetnie.


1

Ten sam problem w 64-bitowym systemie Windows 10 z uruchomionym Git Bash w wersji 2.9.0.windows1 Używanie Atom jako mojego edytora.

To działało dla mnie: dodałem folder oprogramowania Git (dla mnie był to C: \ Program Files \ Git) do wyłączeń dla Windows Defender.

Po dodaniu wykluczenia git checkout 'file'działało dobrze.


1

Ten błąd może być również spowodowany tym, że pliki są nadal „blokowane” z powodu wcześniejszych akcji git. Ma to związek z działaniem warstwy systemu plików Windows. Kiedyś przeczytałem ładne wyjaśnienie na ten temat, ale nie pamiętam gdzie.

W takim przypadku jednak, ponieważ jest to w zasadzie warunek wyścigu, wszystko, co musisz zrobić, to kontynuować przerwany proces zmiany bazy . Niestety, zdarza mi się to cały czas, więc napisałem do tego małego niebezpiecznego pomocnika, aby moje bazy działały dalej:

#!/bin/sh

set -e

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

Jeśli chcesz się upewnić, możesz użyć, git rebase --edit-todoaby sprawdzić, czy następne zatwierdzenie, które ma zostać zastosowane, jest tym, którego wcześniej nie zastosowano. Użyj, git clean -dnaby upewnić się, że nie usuwasz żadnych ważnych plików.


1

Zdarzyło mi się, gdy w systemie Windows korzystałem z Photoshopa: kiedy zapisałem obraz, a następnie przełączyłem się na oddział (pozostawiając Photoshopa z otwartym obrazem), dostałem błąd git. Zamknij obraz w Photoshopie i spróbuj ponownie



1

Zabicie procesu w3wp.exe związanego z repozytorium naprawiło to dla mnie.



0

Wystąpił ten błąd, gdy mój VS1013 był na gałęzi kierującej się na wersję 8.1 i próbowałem wyewidencjonować gałąź 8.0. Musiałem wrócić do VS i pozwolić mu na UpdateAll. Wtedy mógłbym bez problemu sprawdzić gałąź 8.0.


0

Byłem również na komputerze z systemem Windows przy użyciu Git Shell, gdy napotkałem ten sam błąd.

Jednak w tym czasie miałem wiele otwartych terminali Git.

Pierwszy terminal otrzymał błąd, o którym pisałeś wyżej, a drugi terminal wcześniej uruchomił grunt servepolecenie terminalu od yeoman (link poniżej). Drugi terminal musiał pozostać otwarty, aby obsługiwać lokalną instancję serwera.

Zamknięcie wszystkich okien terminali z uruchomionymi procesami może spowodować zniknięcie błędu.

Przynajmniej to działało dla mnie. Po zamknięciu drugiego okna terminala mogłem łatwo pobierać różne gałęzie i manipulować plikami.

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


0

Właśnie natrafiłem na ten problem. Brak odpowiedzi tutaj rozwiązał to dla mnie.

Skończyło się na pakietach nuget, które dodałem do gałęzi, która po przełączeniu z powrotem na gałąź master wydawała się nie istnieć. Kiedy zrobiłem scalenie, powiedziałoby to, że newtonsoft ... xml nie mógł stat. Chciałbym przejść do tego pliku i otworzyć go, ale system Windows zwrócił błąd, mówiąc, że nie może znaleźć pliku (mimo że patrzyłem na niego bezpośrednio)

Jak to rozwiązałem, kliknij prawym przyciskiem myszy usuń plik (który działał, ale nie mogłem go otworzyć, ponieważ system Windows nie mógł go znaleźć ???) i spróbuj połączyć ponownie, a to rozwiązało problem.

Bardzo dziwny.

Mam nadzieję, że to pomoże komuś później.


0

Opuściłem edytor tekstu, który uzyskiwał dostęp do katalogów projektu, a następnie spróbowałem połączyć się z gałęzią master i działało.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.