não foi possível remover o arquivo que realmente existe - fatal: pathspec… não encontrou nenhum arquivo

165

incapaz de remover o arquivo que realmente existe - fatal: pathspec ... não encontrou nenhum arquivo

Eu tenho um arquivo sob controle git que simplesmente não será excluído. O comando com falha é:

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

Abaixo, listo o conteúdo do diretório, as ramificações, etc. Até agora, tentei rm dentro do diretório e escapo para o caso de haver personagens engraçados e estou realmente perplexo. Eu pesquisei na web e SO, mas não conseguiu encontrar isso especificamente. Desde já, obrigado!

$ 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

ATUALIZAR: As respostas de Nevik e Boris ajudaram muito. Percebi que estava confuso com várias coisas acontecendo, algumas das quais foram exacerbadas pelo IntelliJ IDEA (uma ferramenta que geralmente amo, BTW). Primeiro, a mensagem 'fatal: pathspec' do git rm é inútil e enganosa (na opinião deste usuário de baunilha). Segundo, eu tinha o arquivo em .gitignore, mas o havia removido antes de fazer minha pergunta. No entanto, ele também foi incluído no recurso Ignored Files da IDEA, independentemente do git, e exibido como tal no visualizador de projetos (em vez de não ser rastreado, como o status do git mostrou). Finalmente, eu tive o IDEA em execução enquanto eu estava experimentando, e parece que ele estava recriando o arquivo imediatamente após a minha operação. Portanto, minha opinião é que, se estou ficando confuso com o comportamento do Git, feche o IDEA e trabalhe só na linha de comando (e gitk) durante a depuração. E que os usuários de SO são impressionantes. Obrigado novamente!

Matthew Cornell
fonte
15
você tentou simplesmente remover o arquivo com em rmvez de git rm?
Nevik Rehnel
1
@NevikRehnel Sim, pensei em tentar isso, obrigado, mas parece que o IntelliJ IDEA (que eu estava executando) ressuscitou após cada exclusão. Doh!
Matthew Cornell
Estou trabalhando com o Eclipse e o Attlassian SourceTree ... sua pergunta me ajuda a resolver esse problema. Obrigado !
Manu
Você pode usar git clean -f .idea/workspace.xmlpara remover o arquivo não rastreado.
chemturion

Respostas:

134

Seu arquivo .idea/workspace.xmlnão está sob controle de versão do git. Você ainda não o adicionou (verifique o status do git / arquivos não rastreados) ou o ignorou (usando os arquivos .gitignore ou .git / info / exclude)

Você pode verificá-lo usando o seguinte comando git, que lista todos os arquivos ignorados:

git ls-files --others -i --exclude-standard
Boris Brodski
fonte
Isso ajudou muito, Boris. Obrigado! Eu atualizei a minha pergunta para resumir as coisas que estavam acontecendo (IDEA, etc.)
Matthew Cornell
23
$>git add .
$>git rm file_Name  

Funciona. Você adiciona um novo arquivo usando o botão direito do mouse -> criar novo arquivo e exclui-o imediatamente depois disso. O arquivo iria para a lista de arquivos não rastreados.

gnganpath
fonte
2
Se ele dará erro ao excluir o arquivo, em seguida, ao excluir o arquivo que você pode usar algo -f como: $> git rm -f file_name
Abhinav bhardwaj
1
Quando alguém precisa de rmum diretório ou arquivo, ele não precisa adicioná-lo ao git se ele ainda não estiver listado no controle de versão do git.
Mohammad Kermani
8

Sei que esse não é o problema do OP, mas encontrei o mesmo erro com uma base totalmente diferente, então só queria soltá-lo aqui caso outras pessoas tenham o mesmo. Isso é específico do Windows e suponho que não afeta os usuários do Linux.

Eu tinha um arquivo de documento do LibreOffice, chame-o final report.odt. Mais tarde mudei seu caso para Final Report.odt. No Windows, isso nem conta como renomear. final report.odt, Final Report.odt,FiNaL RePoRt.oDt São todos iguais. No Linux, tudo isso é distinto.

Quando eu finalmente fui git rm "Final Report.odt"e recebi o erro "pathspec não encontrou nenhum arquivo". Somente quando eu uso a caixa original no momento em que o arquivo foi adicionado - git rm "final report.odt"- funcionou.

Lição aprendida: para mudar o caso, eu deveria ter feito:

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

Novamente, esse não foi o problema para o OP aqui; e não afetaria um usuário do Linux, como seus posts mostram claramente. Estou apenas incluindo-o para outras pessoas que podem ter esse problema no Windows git e tropeçar nessa questão.

codingatty
fonte
1
Isso pode acontecer no Windows se qualquer parte do caminho for diferente no caso do que é gravado no git. Consegui uma solução alternativa usando um shell bash no Windows
Rattle
3

Se o seu arquivo idea/workspace.xml for adicionado ao .gitignore (ou sua pasta pai), basta addmanualmente para o controle de versão do git. Além disso, você pode adicioná-lo usando o TortoiseGit. Após o próximo impulso, você verá que seu problema está resolvido.

Adicionar à versão git usando o TortoiseGit

Lord Nighton
fonte
1
Quando alguém precisa de rmum diretório ou arquivo, ele não precisa adicioná-lo ao git se ele ainda não estiver listado no controle de versão do git!
Mohammad Kermani
0

No meu caso, havia algo completamente estranho que não sei ao certo qual foi a causa. Uma pasta inteira foi confirmada anteriormente. Eu pude vê-lo no Git, no Windows Explorer e no GitHub, mas todas as alterações feitas na própria pasta e nos arquivos nela foram ignoradas. Usando git check-ignorepara ver o que estava ignorando e tentando removê-lo usandogit rm --cached não teve impacto. As mudanças não puderam ser preparadas.

Eu o corrigi por:

  1. Fazendo uma cópia da pasta e arquivos em outro local.
  2. Excluí o original que estava sendo ignorado de alguma forma.
  3. Confirme e envie esta atualização.
  4. Finalmente, adicionei os arquivos e a pasta de volta e o git estava vendo e reagindo a ela conforme o esperado novamente.
  5. Encene e comprometa isso, e você estará pronto! :)
Will Strohl
fonte
0

Pessoalmente, me deparei com uma mensagem de erro semelhante neste cenário:

Criei uma pasta que estava vazia ; portanto, naturalmente, enquanto estiver vazia, a digitação git add *não levará em consideração essa pasta vazia. Então, quando eu tentei correr git rm -r *ou simplesmente gitrm my_empty_folder/ -r, , recebi a mensagem de erro.

A solução é simplesmente removê-lo sem o git: rm -r my_empty_folder/ ou criar um arquivo de dados dentro desta pasta e adicioná-lo ( git add my_no_long_empty_folder)

Billal Begueradj
fonte
0

Tais medidas me ajudaram:

  1. git add.
  2. esconderijo
Mykola
fonte
-6

Mova temporariamente .gitignore para .gitignore.bck

user4551034
fonte