impossibile rimuovere il file che esiste davvero - fatale: pathspec ... non corrisponde ad alcun file


165

impossibile rimuovere il file che esiste realmente - fatal: pathspec ... non corrisponde ad alcun file

Ho un file sotto controllo git che semplicemente non verrà eliminato. Il comando non riuscito è:

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

Di seguito elencherò i contenuti della directory, i rami, ecc. Finora ho provato rm dall'interno della directory e sono scappato nel caso ci fossero personaggi divertenti, e sono davvero sconcertato. Ho cercato sul web e SO ma non ho trovato questo in modo specifico. Grazie in anticipo!

$ 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

AGGIORNARE: Le risposte di Nevik e Boris sono state di grande aiuto. Mi sono reso conto che ero confuso da una serie di cose in corso, alcune delle quali sono state esacerbate da IntelliJ IDEA (uno strumento che in genere adoro, BTW). In primo luogo, il messaggio 'fatale: pathspec' di git rm è sia inutile che fuorviante (secondo l'opinione di questo vanilla user). In secondo luogo, avevo il file in .gitignore, ma lo avevo rimosso prima di porre la mia domanda. Tuttavia, è stato anche incluso nella funzione File ignorati di IDEA indipendentemente da git e mostrato come tale nel visualizzatore del progetto (anziché non tracciato, come mostrato dallo stato di git). Alla fine, ho avuto IDEA in esecuzione mentre stavo sperimentando, e sembra che stesse ricreando il file immediatamente dopo il mio rm. Quindi, il mio takeaway è che se sto ottenendo un comportamento confuso di Git, assicurati di uscire da IDEA e lavorare solo nella riga di comando (e gitk) durante il debug. E che gli utenti SO sono fantastici. Grazie ancora!


15
hai provato semplicemente a rimuovere il file con rminvece di git rm?
Nevik Rehnel,

1
@NevikRehnel Sì, avevo pensato di provarlo, grazie, ma sembra che IntelliJ IDEA (che avevo in esecuzione) abbia rianimato dopo ogni eliminazione. Doh!
Matthew Cornell,

Sto lavorando con Eclipse e Attlassian SourceTree ... la tua domanda mi aiuta a risolvere questo problema. Grazie !
Manu,

È possibile utilizzare git clean -f .idea/workspace.xmlper rimuovere il file non tracciato.
chemturion,

Risposte:


134

Il tuo file .idea/workspace.xmlnon è sotto il controllo della versione di git. Non l'hai ancora aggiunto (controlla lo stato di git / file non monitorati) o ignorato (usando .gitignore o .git / info / escludi file)

Puoi verificarlo usando il seguente comando git, che elenca tutti i file ignorati:

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

Ciò ha aiutato molto, Boris. Grazie! Ho aggiornato la mia domanda per riassumere le cose che stavano succedendo (IDEA, ecc.)
Matthew Cornell,

23
$>git add .
$>git rm file_Name  

Funziona. Aggiungi un nuovo file usando il tasto destro del mouse -> crea un nuovo file e dopo lo elimini immediatamente. Il file verrebbe visualizzato nell'elenco dei file non tracciati.


2
Se ti dà errore durante l'eliminazione del file, quindi durante l'eliminazione del file puoi usare -f qualcosa come: $> git rm -f nome_file
Abhinav bhardwaj

1
Quando qualcuno ha bisogno di rmuna directory o di un file, non è necessario aggiungerlo a git se non è già elencato sotto il controllo della versione di git.
Mohammad Kermani,

8

So che questo non è il problema del PO, ma ho riscontrato lo stesso errore con una base completamente diversa, quindi volevo solo lasciarlo qui nel caso in cui qualcun altro avesse lo stesso. Questo è specifico di Windows e presumo non influisca sugli utenti Linux.

Avevo un file doc di LibreOffice, chiamalo final report.odt. Successivamente ho cambiato il suo caso in Final Report.odt. In Windows, questo non conta nemmeno come rinomina. final report.odt, Final Report.odt, FiNaL RePoRt.oDtSono tutti uguali. In Linux, questi sono tutti distinti.

Quando alla fine sono andato a git rm "Final Report.odt"ottenere l'errore "pathspec non corrisponde ad alcun file". Solo quando uso il case originale al momento dell'aggiunta del file - git rm "final report.odt"- ha funzionato.

Lezione imparata: per cambiare il caso avrei dovuto invece fare:

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

Ancora una volta, questo non era il problema per l'OP qui; e non influirebbe su un utente Linux, come dimostrano chiaramente i suoi post. Lo sto solo includendo per altri che potrebbero avere questo problema in Windows git e incappare in questa domanda.


1
Questo può accadere su Windows se qualsiasi parte del percorso è diversa nel caso in cui sia registrato in git. Sono stato in grado di risolvere il problema utilizzando una shell bash in Windows
Rattle

3

Se il tuo file idea/workspace.xml viene aggiunto a .gitignore (o alla sua cartella principale), basta addfarlo manualmente per controllare la versione. Inoltre puoi aggiungerlo usando TortoiseGit. Dopo la prossima spinta vedrai che il tuo problema è stato risolto.

Aggiungi a git versioning usando TortoiseGit


1
Quando qualcuno ha bisogno di rmuna directory o di un file, non ha bisogno di aggiungerlo a git se non è già elencato sotto il controllo della versione di git!
Mohammad Kermani,

0

Nel mio caso, c'era qualcosa di completamente strano che non sono sicuro di quale fosse la causa. In precedenza è stata eseguita il commit di un'intera cartella. Potevo vederlo in Git, Windows Explorer e GitHub, ma qualsiasi modifica apportata alla cartella stessa e ai file in essa contenuti veniva ignorata. Usare git check-ignoreper vedere cosa lo ignorava e tentare di rimuoverlo usando git rm --cachednon ha avuto alcun impatto. Non è stato possibile mettere in scena le modifiche.

L'ho risolto da:

  1. Fare una copia della cartella e dei file in un'altra posizione.
  2. Ho eliminato l'originale che in qualche modo veniva ignorato.
  3. Esegui il commit e invia questo aggiornamento.
  4. Alla fine, ho aggiunto i file e la cartella e git stava vedendo e reagendo come previsto di nuovo.
  5. Metti in scena e commetti questo e sei a posto! :)

0

Personalmente mi sono imbattuto in un messaggio di errore simile in questo scenario:

Ho creato una cartella che è stata vuota , quindi naturalmente finché è vuota, la digitazione git add *non prenderà in considerazione questa cartella vuota. Quindi, quando ho provato a eseguire git rm -r *o semplicemente git rm my_empty_folder/ -r,ho ricevuto quel messaggio di errore.

La soluzione è semplicemente rimuoverlo senza git: rm -r my_empty_folder/ o creare un file di dati all'interno di questa cartella e quindi aggiungerlo ( git add my_no_long_empty_folder)


0

Tali passaggi mi hanno aiutato:

  1. git add.
  2. git stash

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.