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ć?

Ryan Lundy
źródło
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.

CB Bailey
źródło
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.

Cameron Wright
źródło
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ć

ManJan
źródło
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.

Mike Ruhlin
źródło
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 .

romanlv
źródło
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 :(

jestem Batmanem
źródło
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

Muhammed Moussa
źródło
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.

Chrupiący Ninja
źródło
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.

rgngl
źródło
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ń”.
adwokat
źródło
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.

ahnbizcad
źródło
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).

Steven Ventimiglia
źródło
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.

KennethDale1
źródło
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.

mmmdearte
źródło
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.

Gob00st
źródło
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.

Louis
źródło
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.

Perry Tew
źródło
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.

ladygargar
źródło
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

BlondinkaBrain
źródło
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.

HotN
źródło
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.

Paul Spaven
źródło
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.

raphinesse
źródło
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

pscheit
źródło
1

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

Ric
źródło
1

W moim przypadku miałem za sobą serwer deweloperów webpack.

Charith
źródło
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.

Aleksandr Gembinski
źródło
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/

Shawesome
źródło
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.

Psujący rozgrywkę
źródło
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.

PudparK
źródło