impossible de supprimer le fichier qui existe réellement - fatal: pathspec… ne correspond à aucun fichier

165

impossible de supprimer le fichier qui existe réellement - fatal: pathspec ... ne correspond à aucun fichier

J'ai un fichier sous contrôle git qui ne sera tout simplement pas supprimé. La commande qui échoue est:

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

Ci-dessous, je liste le contenu du répertoire, les branches, etc. Jusqu'à présent, j'ai essayé rm depuis le répertoire, et je m'échappe juste au cas où il y aurait des personnages amusants, et je suis vraiment perplexe. J'ai cherché sur le Web et SO mais je n'ai pas trouvé cela spécifiquement. Merci d'avance!

$ 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

METTRE À JOUR: Les réponses de Nevik et Boris ont beaucoup aidé. J'ai réalisé que j'étais confus par un certain nombre de choses qui se passaient, dont certaines étaient exacerbées par IntelliJ IDEA (un outil que j'aime généralement, BTW). Premièrement, le message 'fatal: pathspec' de git rm est à la fois inutile et trompeur (de l'avis de cet utilisateur vanilla). Deuxièmement, j'avais le fichier en .gitignore, mais je l'avais supprimé avant de poser ma question. Cependant, il a également été inclus dans la fonctionnalité Fichiers ignorés d'IDEA indépendamment de git, et affiché comme tel dans le visualiseur de projet (au lieu de non suivi, comme le montre l'état de git). Enfin, j'ai lancé IDEA pendant que j'expérimentais, et il semble qu'il recréait le fichier immédiatement après mon rm. Donc, ce que je retiens est que si j'obtiens un comportement confus de Git, assurez-vous de quitter IDEA et de travailler uniquement dans la ligne de commande (et gitk) pendant le débogage. Et que les utilisateurs SO sont géniaux. Merci encore!

Matthew Cornell
la source
15
avez-vous simplement essayé de supprimer le fichier avec rmau lieu de git rm?
Nevik Rehnel
1
@NevikRehnel Oui, j'avais pensé essayer ça, merci, mais cela ressemble à IntelliJ IDEA (que j'avais en cours d'exécution) ressuscité après chaque suppression. Doh!
Matthew Cornell
Je travaille avec Eclipse et Attlassian SourceTree ... votre question m'aide à résoudre ce problème. Merci !
Manu
Vous pouvez utiliser git clean -f .idea/workspace.xmlpour supprimer le fichier non suivi.
chemturion

Réponses:

134

Votre fichier .idea/workspace.xmln'est pas sous contrôle de version git. Vous ne l'avez pas encore ajouté (vérifiez l'état de git / Fichiers non suivis) ou vous l'avez ignoré (en utilisant les fichiers .gitignore ou .git / info / exclude)

Vous pouvez le vérifier à l'aide de la commande git suivante, qui répertorie tous les fichiers ignorés:

git ls-files --others -i --exclude-standard
Boris Brodski
la source
Cela a beaucoup aidé, Boris. Je vous remercie! J'ai mis à jour ma question pour résumer les choses qui se passaient (IDEA, etc.)
Matthew Cornell
23
$>git add .
$>git rm file_Name  

Ça marche. Vous ajoutez un nouveau fichier en utilisant le clic droit -> créez un nouveau fichier et supprimez-le immédiatement après cela. Le fichier irait dans la liste des fichiers non suivis.

gnganpath
la source
2
Si cela vous donne une erreur lors de la suppression du fichier, alors lors de la suppression du fichier, vous pouvez utiliser -f quelque chose comme: $> git rm -f file_Name
Abhinav bhardwaj
1
Quand quelqu'un a besoin d' rmun répertoire ou d'un fichier, il / elle n'a pas besoin de l'ajouter à git s'il n'est pas déjà répertorié sous le contrôle de version de git.
Mohammad Kermani
8

Je sais que ce n'est pas le problème de l'OP, mais j'ai rencontré la même erreur avec une base entièrement différente, donc je voulais juste la laisser tomber ici au cas où quelqu'un d'autre aurait la même chose. Ceci est spécifique à Windows et je suppose que cela n'affecte pas les utilisateurs Linux.

J'avais un fichier doc LibreOffice, appelez-le final report.odt. J'ai plus tard changé son cas en Final Report.odt. Sous Windows, cela ne compte même pas comme un changement de nom. final report.odt, Final Report.odt, FiNaL RePoRt.oDtSont tous les mêmes. Sous Linux, ils sont tous distincts.

Quand je suis finalement allé git rm "Final Report.odt"et obtenu l'erreur "pathspec ne correspond à aucun fichier". Ce n'est que lorsque j'utilise le boîtier d'origine au moment où le fichier a été ajouté git rm "final report.odt"- que cela a fonctionné.

Leçon apprise: pour changer le cas, j'aurais dû plutôt faire:

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

Encore une fois, ce n'était pas le problème pour le PO ici; et n'affecterait pas un utilisateur Linux, comme ses messages le montrent clairement. Je l'inclus juste pour ceux qui peuvent avoir ce problème dans Windows git et tomber sur cette question.

codant
la source
1
Cela peut se produire sous Windows si une partie du chemin est différente au cas où ce qui est enregistré dans git. J'ai pu contourner le problème en utilisant un shell bash dans Windows
Rattle
3

Si votre fichier idea/workspace.xml est ajouté à .gitignore (ou à son dossier parent), addil suffit de le faire manuellement pour git le contrôle de version. Vous pouvez également l'ajouter en utilisant TortoiseGit. Après la prochaine poussée, vous verrez que votre problème est résolu.

Ajouter à la gestion des versions de git à l'aide de TortoiseGit

Lord Nighton
la source
1
Quand quelqu'un a besoin d' rmun répertoire ou d'un fichier, il / elle n'a pas besoin de l'ajouter à git s'il n'est pas déjà listé sous git version control!
Mohammad Kermani
0

Dans mon cas, il y avait quelque chose de complètement étrange dont je ne sais pas quelle était la cause. Un dossier entier a été précédemment validé. Je pouvais le voir dans Git, l'Explorateur Windows et GitHub, mais toutes les modifications que j'avais apportées au dossier lui-même et aux fichiers qu'il contenait étaient ignorées. Utiliser git check-ignorepour voir ce qui l'ignorait et tenter de le supprimer en utilisant git rm --cachedn'a eu aucun impact. Les changements n'ont pas pu être mis en scène.

Je l'ai réparé par:

  1. Faire une copie du dossier et des fichiers dans un autre emplacement.
  2. J'ai supprimé l'original qui était ignoré d'une manière ou d'une autre.
  3. Validez et diffusez cette mise à jour.
  4. Enfin, j'ai ajouté les fichiers et le dossier et git les voyait et y réagissait à nouveau comme prévu.
  5. Mettez en scène et engagez-vous, et vous êtes prêt à partir! :)
Will Strohl
la source
0

Personnellement, je suis tombé sur un message d'erreur similaire dans ce scénario:

J'ai créé un dossier qui était vide , donc naturellement tant qu'il est vide, la saisie git add *ne prendra pas en compte ce dossier vide. Donc, quand j'ai essayé de courir git rm -r *ou simplement de git, rm my_empty_folder/ -r,j'ai reçu ce message d'erreur.

La solution est de simplement le supprimer sans git: rm -r my_empty_folder/ ou de créer un fichier de données dans ce dossier puis de l'ajouter ( git add my_no_long_empty_folder)

Billal Begueradj
la source
0

Ces étapes m'ont aidé:

  1. git add.
  2. git stash
Mykola
la source
-6

Déplacer temporairement .gitignore vers .gitignore.bck

user4551034
la source