не вдалося видалити файл, який дійсно існує - fatal: pathspec… не збігався з жодними файлами


165

не вдається видалити файл, який дійсно існує - fatal: pathspec ... не збігався з жодними файлами

У мене є файл під контролем git, який просто не буде видалений. Невдала команда:

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

Нижче я перераховую вміст каталогів, гілки тощо. Поки я спробував rm зсередини каталогу, і уникаю, на випадок, якщо є смішні символи, і я дуже спотикаюся. Я шукав в Інтернеті і так, але конкретно не міг цього знайти. Спасибі заздалегідь!

$ 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

ОНОВЛЕННЯ: Відповіді Невіка та Бориса дуже допомогли. Я зрозумів, що мене збентежила низка дій, які деякі з них посилили IntelliJ IDEA (інструмент, який я, як правило, люблю, BTW). По-перше, повідомлення "fatal: pathspec" від git rm є одночасно корисним та оманливим (на думку користувача ванілі). По-друге, я мав файл у .gitignore, але видалив його, перш ніж ставити запитання. Однак він також був включений у функцію Ігнорованих файлів IDEA незалежно від git та показаний як такий у переглядачі проекту (замість відслідковування, як показав статус git). Нарешті, у мене було запущено IDEA, коли я експериментував, і схоже, що він відтворив файл відразу після моєї RM. Отже, моє вирішення полягає в тому, що якщо я заплутаю поведінку Git, переконайтесь, що вийдіть з IDEA та працюйте з солей у командному рядку (та gitk) під час налагодження. І що користувачі SO дивовижні. Знову дякую!


15
ви намагалися просто видалити файл rmзамість git rm?
Невік Ренель

1
@NevikRehnel Так, я думав спробувати це, дякую, але схоже, що IntelliJ IDEA (який я працював) реанімував після кожного видалення. До!
Меттью Корнелл

Я працюю з Eclipse та Attlassian SourceTree ... ваше питання допоможе мені вирішити цю проблему. Дякую !
Ману

Ви можете використовувати git clean -f .idea/workspace.xmlдля видалення файлу, що не відслідковується.
chemturion

Відповіді:


134

Ваш файл .idea/workspace.xmlне знаходиться під контролем версії git. Ви його ще не додали (перевірте статус git / Файли без відключення) або проігнорували його (використовуючи .gitignore або .git / info / виключити файли)

Ви можете перевірити це за допомогою наступної команди git, в якій перераховані всі ігноровані файли:

git ls-files --others -i --exclude-standard

Це дуже допомогло, Борисе. Дякую! Я оновив своє питання, щоб узагальнити те, що відбувалося (IDEA тощо)
Меттью Корнелл

23
$>git add .
$>git rm file_Name  

Це працює. Ви додаєте новий файл, клацнувши правою кнопкою миші -> створити новий файл, і відразу видалити його після цього. Файл перейде до списку не відстежених файлів.


2
Якщо він видає помилку під час видалення файлу, тоді під час видалення файлу ви можете використовувати -f щось на зразок: $> git rm -f file_Name
Abhinav bhardwaj

1
Коли комусь потрібен rmкаталог або файл, йому / їй не потрібно додавати його в git, якщо він ще не вказаний під контролем версії git.
Мохаммед Кермані

8

Я знаю, що це не проблема ОП, але я зіткнувся з однією і тією ж помилкою з зовсім іншою основою, тому просто хотів її відпустити сюди, на випадок, якщо хтось має таке. Це специфічно для Windows, і я припускаю, що це не впливає на користувачів Linux.

У мене був файл doc LibreOffice, називайте його final report.odt. Пізніше я змінив її справу на Final Report.odt. У Windows це навіть не вважається перейменом. final report.odt, Final Report.odt,FiNaL RePoRt.oDt Все те ж саме. У Linux це все чітко.

Коли я врешті-решт пішов git rm "Final Report.odt"і отримав помилку "pathspec не відповідає жодним файлам". Тільки коли я використовую оригінальний корпус під час додавання файлу - git rm "final report.odt" - це працювало.

Урок засвоєний: щоб змінити справу, я повинен був би зробити це:

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

Знову ж, це не було проблемою для ОП тут; і це не вплине на користувача Linux, як свідчать його публікації. Я просто включаю його для інших, хто може мати цю проблему в Windows git і натрапляє на це питання.


1
Це може статися в Windows, якщо будь-яка частина шляху відрізняється від того, що записано в git. Мені вдалося вирішити, використовуючи оболонку bash у Windows
Rattle

3

Якщо ваш файл idea/workspace.xml додано до .gitignore (або його батьківської папки), просто addйого вручну, щоб отримати доступ до керування версіями. Також ви можете додати його за допомогою TortoiseGit. Після наступного поштовху ви побачите, що ваша проблема вирішена.

Додайте до версії git за допомогою TortoiseGit


1
Коли комусь потрібен rmкаталог або файл, йому / їй не потрібно додавати його до git, якщо він ще не вказаний під контролем версії git!
Мохаммед Кермані

0

У моєму випадку було щось абсолютно дивне, що я не впевнений, в чому причина. Цілу папку було скоєно раніше. Я міг бачити це в Git, Windows Explorer та GitHub, але будь-які зміни, які я вніс у саму папку та файли в ній, були проігноровані. Використання git check-ignoreдля перегляду того, що його ігнорує, та спроба видалити його за допомогою git rm --cachedне вплинуло. Зміни не вдалося здійснити.

Я виправив це:

  1. Створення копії папки та файлів в іншому місці.
  2. Я видалив оригінал, який якимось чином ігнорувався.
  3. Введіть і натисніть це оновлення.
  4. Нарешті, я додав файли та папки назад, і git бачив та реагував на нього, як очікувалося.
  5. Поставте та зробіть це, і вам добре піти! :)

0

Особисто я натрапив на подібне повідомлення про помилку в цьому сценарії:

Я створив папку, яка була порожньою , так що, природно, поки вона порожня, введення git add *не сприймає цю порожню папку. Тож коли я намагався бігати git rm -r *або просто гнітиrm my_empty_folder/ -r, я отримав це повідомлення про помилку.

Рішення полягає в тому, щоб просто видалити його без git: rm -r my_empty_folder/ або створити файл даних у цій папці, а потім додати його ( git add my_no_long_empty_folder)



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.