nie można usunąć pliku, który naprawdę istnieje - fatal: pathspec… nie pasuje do żadnych plików

165

nie można usunąć pliku, który naprawdę istnieje - fatal: pathspec ... nie pasuje do żadnych plików

Mam plik pod kontrolą gita, który po prostu nie zostanie usunięty. Niepowodzenie polecenia to:

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

Poniżej wymieniam zawartość katalogu, gałęzie itp. Do tej pory próbowałem rm z poziomu katalogu i ucieczki na wypadek, gdyby były zabawne postacie i jestem naprawdę zaskoczony. Przeszukałem Internet i SO, ale nie mogłem znaleźć tego konkretnie. Z góry dziękuję!

$ git branch -a
* dot-output
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/modelspace
$ 

$ git status
# On branch dot-output
# Untracked files:
# ...

$ ls .idea/
ant.xml         encodings.xml       modules.xml     workspace.xml
compiler.xml        inspectionProfiles  scopes
copyright       libraries       testrunner.xml
dictionaries        misc.xml        vcs.xml

$ ls -al
total 56
drwxr-xr-x  16 matt  staff    544 Apr 10 11:33 .
drwxr-xr-x@ 33 matt  staff   1122 Apr 10 09:40 ..
-rw-r--r--@  1 matt  staff  12292 Apr 10 11:19 .DS_Store
drwxr-xr-x  18 matt  staff    612 Apr 10 11:39 .git
-rw-r--r--   1 matt  staff     98 Mar  6 13:40 .gitignore
drwxr-xr-x  16 matt  staff    544 Apr 10 11:34 .idea
-rw-r--r--   1 matt  staff   1113 Feb 25 11:07 README
...

$ head -n 2 .idea/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

AKTUALIZACJA: Odpowiedzi Nevika i Borisa bardzo pomogły. Zdałem sobie sprawę, że byłem zdezorientowany przez wiele rzeczy, z których niektóre zostały zaostrzone przez IntelliJ IDEA (narzędzie, które generalnie uwielbiam, BTW). Po pierwsze, komunikat „fatal: pathspec” z git rm jest zarówno nieprzydatny, jak i wprowadzający w błąd (w opinii tego użytkownika waniliowego). Po drugie, miałem plik w .gitignore, ale usunąłem go przed zadaniem pytania. Jednak został również uwzględniony w funkcji Ignored Files IDEA niezależnie od git i pokazany jako taki w przeglądarce projektu (zamiast nieśledzonego, jak pokazał status git). W końcu miałem uruchomiony IDEA podczas eksperymentowania i wygląda na to, że odtwarzał plik natychmiast po moim rm. Tak więc, moim wnioskiem jest to, że jeśli mylę się z zachowaniem Gita, pamiętaj, aby wyjść z IDEA i pracować samodzielnie w wierszu poleceń (i gitk) podczas debugowania. I że użytkownicy SO są niesamowici. Dzięki jeszcze raz!

Matthew Cornell
źródło
15
czy próbowałeś po prostu usunąć plik za pomocą rmzamiast git rm?
Nevik Rehnel,
1
@NevikRehnel Tak, myślałem, żeby spróbować, dziękuję, ale wygląda na to, że IntelliJ IDEA (który uruchomiłem) reanimowano po każdym usunięciu. No!
Matthew Cornell
Pracuję z Eclipse i Attlassian SourceTree ... Twoje pytanie pomoże mi rozwiązać ten problem. Dzięki !
Manu
Możesz użyć, git clean -f .idea/workspace.xmlaby usunąć nieśledzony plik.
chemturion

Odpowiedzi:

134

Twój plik .idea/workspace.xmlnie znajduje się pod kontrolą wersji git. Albo jeszcze go nie dodałeś (sprawdź stan git / niezatwierdzone pliki) albo zignorowałeś (używając plików .gitignore lub .git / info / exclude)

Możesz to sprawdzić za pomocą następującego polecenia git, które wyświetla listę wszystkich ignorowanych plików:

git ls-files --others -i --exclude-standard
Boris Brodski
źródło
To bardzo pomogło, Boris. Dziękuję Ci! Zaktualizowałem moje pytanie, aby podsumować rzeczy, które się wydarzyły (IDEA itp.)
Matthew Cornell
23
$>git add .
$>git rm file_Name  

To działa. Dodajesz nowy plik prawym przyciskiem myszy -> utwórz nowy plik, a następnie natychmiast go usuń. Plik zostanie przeniesiony na listę plików bez śledzenia.

gnganpath
źródło
2
Jeśli wystąpi błąd podczas usuwania pliku, to podczas usuwania pliku możesz użyć -f coś takiego: $> git rm -f nazwa_pliku
Abhinav bhardwaj
1
Kiedy ktoś potrzebuje rmkatalogu lub pliku, nie musi dodawać go do git, jeśli nie jest jeszcze wymieniony pod kontrolą wersji git.
Mohammad Kermani,
8

Wiem, że to nie jest problem OP, ale napotkałem ten sam błąd na zupełnie innej podstawie, więc chciałem go tutaj zostawić na wypadek, gdyby ktoś inny miał to samo. Jest to specyficzne dla systemu Windows i zakładam, że nie ma to wpływu na użytkowników Linuksa.

Miałem plik doc LibreOffice, nazwij to final report.odt. Później zmieniłem jego obudowę na Final Report.odt. W systemie Windows nie liczy się to nawet jako zmiana nazwy. final report.odt, Final Report.odt, FiNaL RePoRt.oDtWszystkie są takie same. W Linuksie wszystkie są różne.

Kiedy w końcu poszedłem do git rm "Final Report.odt"i otrzymałem błąd „pathspec nie pasuje do żadnych plików”. Dopiero gdy używam oryginalnej obudowy w momencie dodawania pliku - git rm "final report.odt"- zadziałało.

Wyciągnięta lekcja: zamiast tego powinienem był zmienić przypadek:

git mv "final report.odt" temp.odt
git mv temp.odt "Final Report.odt"

Znowu to nie był problem dla PO tutaj; i nie wpłynie na użytkownika Linuksa, jak wyraźnie pokazują jego posty. Po prostu dołączam to dla innych, którzy mogą mieć ten problem w systemie Windows git i natknąć się na to pytanie.

codingatty
źródło
1
Może się to zdarzyć w systemie Windows, jeśli jakakolwiek część ścieżki jest inna w przypadku tego, co jest zapisane w git. Udało mi się obejść ten problem, używając powłoki bash w systemie Windows
Rattle
3

Jeśli twój plik idea/workspace.xml zostanie dodany do .gitignore (lub jego folderu nadrzędnego), wystarczy addgo ręcznie, aby kontrolować wersję git. Możesz również dodać go za pomocą TortoiseGit. Po kolejnym naciśnięciu zobaczysz, że Twój problem został rozwiązany.

Dodaj do wersji git za pomocą TortoiseGit

Lord Nighton
źródło
1
Kiedy ktoś potrzebuje rmkatalogu lub pliku, nie musi dodawać go do git, jeśli nie jest jeszcze wymieniony pod kontrolą wersji git!
Mohammad Kermani,
0

W moim przypadku było coś zupełnie dziwnego, że nie jestem pewien, jaka była przyczyna. Cały folder został wcześniej zatwierdzony. Widziałem to w Git, Windows Explorer i GitHub, ale wszelkie zmiany, które wprowadziłem w samym folderze i zawartych w nim plikach, zostały zignorowane. Używanie, git check-ignoreaby zobaczyć, co go ignorowało, i próba usunięcia go za pomocą git rm --cachednie miało żadnego wpływu. Zmian nie można było przeprowadzić.

Naprawiłem to przez:

  1. Wykonanie kopii folderu i plików w innej lokalizacji.
  2. Usunąłem oryginał, który był w jakiś sposób ignorowany.
  3. Zatwierdź i wypchnij tę aktualizację.
  4. Na koniec dodałem pliki i folder z powrotem, a git znów je widział i reagował zgodnie z oczekiwaniami.
  5. Wykonaj scenę i zatwierdź to, i gotowe! :)
Will Strohl
źródło
0

Osobiście natknąłem się na podobny komunikat o błędzie w tym scenariuszu:

Utworzyłem folder, który był pusty , więc oczywiście, o ile jest pusty, pisanie git add *nie będzie uwzględniać tego pustego folderu. Więc kiedy próbowałem uruchomić git rm -r *lub po prostu git rm my_empty_folder/ -r,, otrzymałem ten komunikat o błędzie.

Rozwiązaniem jest po prostu usunięcie go bez git: rm -r my_empty_folder/ lub utworzenie pliku danych w tym folderze, a następnie dodanie go ( git add my_no_long_empty_folder)

Billal Begueradj
źródło
0

Takie kroki pomogły mi:

  1. git add.
  2. git stash
Mykoła
źródło
-6

Przenieś tymczasowo .gitignore do .gitignore.bck

user4551034
źródło