Odłączenie pliku nie powiodło się. Powinienem spróbować jeszcze raz?

571

Coś nie tak dzieje się z jednym z plików w moim lokalnym repozytorium git. Kiedy próbuję zmienić gałąź, mówi:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

Co to może znaczyć?

Pol
źródło
1
Sprawdź to pytanie
RDL
możliwy duplikat błędu [Git rebase dostał błąd „nie udało się odłączyć pliku”] ( stackoverflow.com/questions/3698369/... )
Josh Lee
czy dana odpowiedź działała dla Ciebie, jeśli przeglądarka procesów nie działa, uruchom ponownie, a następnie możesz usunąć plik, możesz także zaakceptować odpowiedź, jeśli zadziałała
dhaval
1
Sprawdź także, czy proces git ma uprawnienia do zapisu w tym pliku.
boileau
5
możliwy duplikat Odłącz plik nie powiódł się
BartoszKP

Odpowiedzi:

751

Może to oznaczać, że inny program korzysta z pliku, co uniemożliwia gitowi „przeniesienie” pliku do lub z katalogu roboczego podczas próby zmiany gałęzi.

Zdarzyło mi się to w systemie Windows Vista, w którym zaćmienie to program „używający” pliku. Plik może nie być w rzeczywistości otwarty w środowisku Eclipse, ale mógł zostać otwarty przez proces uruchamiany przez środowisko Eclipse.

W takim przypadku spróbuj zamknąć plik w dowolnej aplikacji, która mogła go użyć. Jeśli to nie zadziała, całkowicie zamknij wszystkie aplikacje, które mogły otworzyć plik.

Melisa
źródło
53
W systemie Windows użyj ProcessExplorer, aby znaleźć proces, w którym plik jest otwarty.
Dave C
2
Czy istnieje sposób na napisanie skryptu, np. „Jeśli tego pliku nie można usunąć (np. Plik po prostu nie istnieje), po prostu pomiń plik”.
2xMax
14
W moim przypadku było to Visual Studio i jego wtyczka Git.
Michał Powaga
8
W systemie Windows, jeśli nie masz dostępnego ProcessExplorer lub nie chcesz go pobrać, możesz uruchomić (Windows + R) „resmon”, przejść do zakładki CPU i wyszukać nazwę pliku w polu tekstowym „Associated Identifiers”.
Raphael
6
Jeśli go użyjesz, GitKrakenmożesz go otrzymać, wykonując polecenia jak
baza
285

Miałem ten problem i rozwiązałem go poleceniem: git gc powyższe polecenie usuwa temp i niepotrzebne pliki. (Śmieciarz.)

khilo
źródło
43
git pullinicjowane git gcautomatycznie i gc próbował uzyskać dostęp do niektórych plików .pack i .inx. Były one utrzymywane przez proces „Windows git”, który posiadał git pullpolecenie. Uruchamianie git gcręczne i git pullpóźniej - naprawdę rozwiązuje problem.
Nikita
4
Podczas pracy git gcponownie pojawił się ten sam błąd, gdy gcbył w toku
Prakash K
4
„Uruchamianie git gc ręcznie, a potem - git pull naprawdę rozwiązuje problem.” To pomogło. Dziękuję Nikita.
sangam
To mi też pomogło. Uruchomiłem to w systemie Windows z Git Bash
Ascalonian
Po rozpoczęciu ściągania git otrzymałem ten błąd. Nacisnąłem CTRL + C, aby zatrzymać ściąganie, uruchom git gc, a następnie ponownie uruchom git, problem zniknął i nic nie zostało zerwane przez przerwanie ściągania.
daniel sp
84

to rozwiązanie tutaj działało dla mnie:

Jest to odpowiedź specyficzna dla systemu Windows, więc jestem świadomy, że nie jest ona dla ciebie odpowiednia ... Po prostu uwzględniam ją z korzyścią dla przyszłych użytkowników.

W moim przypadku było tak, ponieważ uruchomiłem Git z wiersza poleceń bez podniesionego poziomu uprawnień. „Uruchom jako administrator” naprawiło to dla mnie.

sepehr
źródło
2
Pracował dla mnie. Uruchom VS jako administrator, a następnie uruchomiłem wiersz polecenia z VS
Sentinel
3
I: Ctrl+Cwpisałem, aby zakończyć bardzo długą listę plików, których nie można odtworzyć; opuściłem gitbash, my IDE i aplikację Windows GitHub; zrestartowałem gitbash w podwyższonym trybie „Uruchom jako administrator”; i pobiegł git gc --aggressive. Zajęło to trochę czasu, ale udało się to bez błędów.
Mark McClelland,
Jeśli uważasz, że jest to duplikat, powinieneś oflagować go jako taki, a nie dodawać odpowiedzi wskazującej na inną odpowiedź
Liam,
2
@Liam To pytanie jest starsze, ale ta odpowiedź była tylko na inne pytanie i nie ma tylko jednej odpowiedzi na to pytanie, co utrudnia ustawienie jednego jako duplikatu.
wrz
To działało całkiem dobrze dla mnie. Żadna z poprzednich odpowiedzi nie. Wielkie dzięki.
Roberto Rodriguez
35

Napotkałem ten problem podczas robienia git pull.

Próbowałem git gci to rozwiązało mój problem.

Rahul Chandran
źródło
Natrafiłem na ten problem na komputerze z systemem Windows i to rozwiązanie początkowo nie działało. Jednak po uruchomieniu tego polecenia z wiersza polecenia administratora rozwiązało to mój problem.
William W
23

W moim przypadku nie ma procesów dotykających pliku lub katalogu. Może się zdarza, jeśli ścieżka jest bardzo długa, ponieważ ograniczenie systemu operacyjnego (Windows). Spróbuj włączyć flagę obsługi długiej ścieżki w globalnej konfiguracji git, jak pokazano poniżej:

git config --global core.longpaths true

lub spróbuj ustawić flagę odpowiedzi tak / nie, jeśli nie jest dla ciebie sprzeczna

set GIT_ASK_YESNO=false

Jeśli ścieżka jest za długa, nie znalazłem udanego rozwiązania.

andhdo
źródło
5
Nie wiem dlaczego, ale ustawienie „git config --global core.longpaths true” było dla mnie pomocne.
Maxim
GIT_ASK_YESNO, nie mogę znaleźć informacji o tym. Skąd to pochodzi ?
majkinetor
patrz na przykład : stackoverflow.com/questions/3698369/ ...; Nie
działam
core.longpathsz dodatkowym: reset - twardy prune gc działał dla mnie - ale musiał zamknąć AndroidStudio, aby nie zepsuć się jego
wbudowanymi
11

Próbowałem git gci to rozwiązało mój problem.

Mukesh Yadav
źródło
10

Może to być przydatne dla kogoś; jeśli wszystkie powyższe nie zadziałały, wykonaj następujące kroki:

  1. Zamknij swoje IDE (moje to Eclipse, nie jestem pewien, czy dotyczy Intellij i innych) lub jakiejkolwiek innej aplikacji, która może używać git.

  2. Otwórz git z wiersza poleceń (w moim przypadku miałem git bash) i uruchom git gcjak wspominali inni.

To zrobiło dla mnie magię.

papigee
źródło
To jest jedyna odpowiedź, która pomogła w moim przypadku, używając Android Studio
0101100101
10

Gdy używam gitkraken i wiersza polecenia, napotkałem ten sam problem. A potem uruchamiam git gcpolecenie, co rozwiązało mój problem. Cieszę się więc i chcę podzielić się niektórymi punktami, które mogą być pomocne.

Co git gczrobisz

git gc usuwanie nieosiągalnych obiektów, które mogły zostać utworzone na podstawie wcześniejszych wywołań git add.

Kiedy biegać git gc?

Od doc zachęca użytkowników do regularnego uruchamiania tego zadania w każdym repozytorium, aby utrzymać dobre wykorzystanie miejsca na dysku i dobrą wydajność operacyjną.

Jak ustawić automatyczne konfigurowanie?

Niektóre polecenia git mogą automatycznie uruchamiać git gc; szczegóły - patrz flaga --auto poniżej. Jeśli wiesz, co robisz i chcesz tylko trwale wyłączyć to zachowanie bez dalszych rozważań, po prostu zrób to

git config --global gc.auto 0
Ramesh Papaganti
źródło
8

W moim przypadku (Win8.1, uruchomiony TortoiseGit) to proces o nazwie „Pamięć podręczna stanu TortoiseSVN” blokował plik.

Zabicie go pozwoliło mi uruchomić „git gc” bez żadnych problemów. Powyższy proces jest uruchamiany przez TortoiseGit, więc nie ma potrzeby ręcznego restartowania go.

nickD
źródło
7

Miałem tego rodzaju problem z Windows 7 i okazało się, że jest to spowodowane osieroconym git.exeprocesem.

Aby go rozwiązać, otwórz Menedżera zadań i zabij wszystkie git.exeprocesy.

Ponieważ gitpolecenia są krótkotrwałe, zwykle nie powinno się ich nigdy widzieć git.exew Menedżerze zadań. Kiedy tam są, zwykle oznacza to, że coś jest nie tak i powinieneś zabić te procesy.

jakub.g
źródło
7

Mam ten problem w systemie Windows. Zamknąłem IDE (Android Studio) i wybrałem TAK w powłoce git. Zadziałało.

vovahost
źródło
5

W systemie Windows 8: uruchomiłem git gc i powiedziało, że git gc już działa, uruchomiłem git gc --force i uruchomił się moduł odśmiecania.

Mógłbym wtedy przełączać gałęzie i łączyć się bez żadnych problemów, spróbuj git gc --force.

Być może proces gc nie zatrzymał się z wdziękiem z tego czy innego powodu.

Mark Howard
źródło
Dotyczy to również systemu Windows 10.
oguzhan
4

Miałem ten problem z .tmpplikami w /.git/objects/packfolderze. Myślę, że coś się nie udało podczas wypychania lub ściągania, więc usunąłem te pliki tymczasowe i zresetowałem HEAD do ostatniego zatwierdzenia. Nie jestem pewien, czy jest to zalecane, ale zadziałało dla mnie. Również git count-objects -vdał mi listę .tmpplików, które nie należą do folderu pack.

Lub, aby ukryć wiadomości r / n w systemie Windows git open cmd.exei uruchomić:

SETX GIT_ASK_YESNO false

tutaj: https://twitter.com/petercamfield/status/494805475733807104

jagody
źródło
Po biegu git gc, git count-objects -vpomaga w identyfikacji pozostałości obiektów tymczasowych w packfolderze.
mistaecko
4

Byłem w stanie rozwiązać ten problem, otwierając Powershell jako Administrator i stamtąd git checkout <branch_name>

Bar Horing
źródło
Dzięki @ bar-horing. Pomogło mi to zidentyfikować problem jako pozwolenie. Po poprawieniu uprawnień systemu Windows do tego folderu działało.
Kumar
3

Napotkałem ten sam problem podczas wykonywania „git pull”. Próbowałem ręcznego czyszczenia komendy git „git gc” i to rozwiązało mój problem.

Zrób to dobrze
źródło
4
Chociaż jest to próba odpowiedzi, nie dodaje niczego, co nie jest jeszcze objęte innymi odpowiedziami (takimi jak ta ). Jeśli próbujesz potwierdzić, że to rozwiązanie działa lub chcesz podziękować autorowi tej odpowiedzi, nie publikuj odpowiedzi, aby to zrobić. Gdy zyskasz trochę więcej reputacji , zyskasz wystarczające uprawnienia do głosowania pozytywnych odpowiedzi, co jest sposobem przepełnienia stosu, by powiedzieć „dziękuję”.
Scott Weldon,
2

Po wypróbowaniu różnych rozwiązań w końcu git clean -fmi pomogło.

EDYCJA: Ponownie napotkałem problem - wydaje się, że pomocne jest zamknięcie wszystkich procesów zależnych od git (takich jak gitbash, Eclipse IDE itp.)

FazoM
źródło
2

Jak wspomniano powyżej, coś innego przechowuje pliki. Chodzi o to, że program nie wygląda dla nas podejrzanie. Próbowałem zrobić git pull z konsoli, mając otwarty GitKraken. Zamknięcie GitKraken naprawiło problem.

100r
źródło
2

Po uruchomieniu polecenia

git rm -rf foo.bar

Widzę błąd

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Ponieważ inny program używa tego pliku . Na przykład, kiedy uruchamiam aplikację internetową Java w modelu debugowania lub uruchamiam aplikację internetową na serwerze, nie mogę usunąć pliku dziennika. Wyłącz serwer aplikacji (lub wyłącz proces debugowania), spróbuj ponownie

git rm -rf foo.bar

Widzę, że plik został usunięty.

Do Nhu Vy
źródło
1

Może to być osobne okno uruchomione gitk, aby zobaczyć historię git.

Wystarczy zamknąć to okno, aby rozwiązać ten problem.

weinerk
źródło
1

Natknąłem się na ten problem, uruchamiając jednocześnie git Bash i Eclipse EGit. Rozwiązanie: zamknij Eclipse. Nie zaszkodzi też biegać, git gcjak wspomniał @khilo.

jhyry
źródło
1

Natknąłem się na ten problem w systemie Windows, możesz uruchomić git bash jako administrator, a następnie wykonać polecenia, które rozwiązały problem.

Pablo Fallas
źródło
1

Jeśli tworzysz aplikację internetową, częstym powodem jest zapomnienie wyłączenia serwera. Na przykład może to być prosty proces Node.js lub w systemie Windows proces IIS działa bardziej dyskretnie jako proces w tle.

alex3683
źródło
1

Próbowałem każdej wskazówki na tej stronie i nic nie pomogło. Robiłem a git fetchi git reset --hard origin/developmentdał mi błąd unkink. Nie mogłem zresetować do ostatniego zatwierdzenia.

Pomogło mi sprawdzenie innej gałęzi, a następnie sprawdzenie poprzedniej gałęzi. Bardzo dziwne, ale rozwiązało problem.

T3rm1
źródło
1

Jeśli zamknięcie IDE i uruchomienie różnych komend git wymienionych tutaj nie pomoże, spróbuj ręcznie zabić wszystkie działające procesy Java. Prawdopodobnie miałem proces Java, który pozostał z zaćmienia, który w jakiś sposób utrzymywał otwarty plik konfiguracyjny.

Marc.S
źródło
1

Jeśli używasz Dockera i systemu Windows 10, możesz zatrzymać kontenery, w których plik może być uruchomiony. Aby wyświetlić statusy swoich kontenerów, uruchom

docker ps -a

Aby je zatrzymać, po prostu biegnij

docker stop <container name or container id>

To działało dla mnie, ponieważ uruchamiam moje lokalne pliki przy użyciu pliku .sh

Krawędź żyletki
źródło
1

Pracowałem dla mnie, wypróbowałem na Windowsie:

Zatrzymaj działanie serwera z IDE lub zamknij IDE

Intellij / Ecllipse lub dowolny, będzie działać.

Codiee
źródło
0

W systemie Windows ten błąd git clonewystępował na (dość dużym) repozytorium. Zamknięty SmartGit i przerwał moje kopii oprogramowania (CrashPlan), a potem to działało. Nie jestem pewien, który z nich zrobił lewę, ale jeśli uruchomisz któryś z nich, może to zrobić również dla ciebie.

Frederik Struck-Schøning
źródło
0

Miałem ten sam problem podczas wykonywania ściągania git i jak wspomniano powyżej, było to spowodowane programem, który przechowywał te pliki i nie pozwalał na ściąganie git. Zamknięcie programu pomogło. Zwykle IDE (jak Eclipse), z którego sprawdzane są pliki, będzie trzymał je w tle. Zamknięcie tego samego i ponowne uruchomienie git pull rozwiązało problem dla mnie.

Somesh Rao
źródło
0

Miałem ten sam błąd, a zamknięcie aplikacji, w której plik był otwarty, rozwiązało problem. Byłem w stanie wrócić i nacisnąć „Y”

Paul McDaniel
źródło