невозможно удалить файл, который действительно существует - 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) во время отладки. И что ТАК пользователи потрясающие. Еще раз спасибо!

Мэтью Корнелл
источник
15
Вы пытались просто удалить файл rmвместо git rm?
Невик Рехнел
1
@NevikRehnel Да, я подумал попробовать это, спасибо, но похоже, что IntelliJ IDEA (который я запускал) реанимировался после каждого удаления. Doh!
Мэтью Корнелл
Я работаю с Eclipse и Attlassian SourceTree ... Ваш вопрос поможет мне решить эту проблему. Спасибо !
Ману
Вы можете использовать, git clean -f .idea/workspace.xmlчтобы удалить неотслеживаемый файл.
Химитурион

Ответы:

134

Ваш файл .idea/workspace.xmlне находится под контролем git-версии. Вы либо еще не добавили его (проверьте состояние git / файлы без отслеживания), либо проигнорировали его (используя файлы .gitignore или .git / info / exclude)

Вы можете проверить это с помощью следующей команды git, которая выводит список всех игнорируемых файлов:

git ls-files --others -i --exclude-standard
Борис Бродский
источник
Это очень помогло, Борис. Спасибо! Я обновил свой вопрос, чтобы подвести итоги происходящего (ИДЕЯ и т. Д.)
Мэтью Корнелл
23
$>git add .
$>git rm file_Name  

Оно работает. Вы добавляете новый файл, используя правую кнопку мыши -> создать новый файл, и сразу после этого удаляете его. Файл перейдет в список неотслеживаемых файлов.

gnganpath
источник
2
Если это приводит к ошибке при удалении файла, то при удалении файла вы можете использовать -f что-то вроде: $> git rm -f file_Name
Abhinav bhardwaj
1
Когда кому-то нужен rmкаталог или файл, ему / ей не нужно добавлять его в git, если его еще нет в списке контроля версий git.
Мохаммад Кермани
8

Я знаю, что это не проблема ОП, но я столкнулся с той же ошибкой на совершенно другой основе, поэтому я просто хотел опустить ее здесь на случай, если у кого-то еще будет то же самое. Это зависит от Windows, и я предполагаю, что это не влияет на пользователей Linux.

У меня был файл документации LibreOffice, позвоните мне final report.odt. Я позже изменил свой случай на Final Report.odt. В Windows это даже не считается переименованием. final report.odt, Final Report.odt, FiNaL RePoRt.oDtВсе то же самое. В Linux все они разные.

Когда я в конце концов пошел git rm "Final Report.odt"и получил ошибку «pathspec not not files files». Только когда я использовал оригинальный корпус во время добавления файла - git rm "final report.odt"он работал.

Извлеченный урок: изменить дело, которое я должен был сделать:

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

Опять же, это не было проблемой для ОП здесь; и не будет влиять на пользователя Linux, как видно из его постов. Я просто включил его для других, у кого может быть эта проблема в Windows Git и наткнуться на этот вопрос.

codingatty
источник
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 *или просто git, rm my_empty_folder/ -r,я получил это сообщение об ошибке.

Решение состоит в том, чтобы просто удалить его без git: rm -r my_empty_folder/ или создать файл данных в этой папке, а затем добавить его ( git add my_no_long_empty_folder)

Биллаль Бегерадж
источник
0

Такие шаги помогли мне:

  1. мерзавец добавить.
  2. заначка
Николай
источник
-6

Переместить временно .gitignore в .gitignore.bck

user4551034
источник