Il file .gitignore
non significa ciò che si pensa significhi.
In particolare, una volta che avete fatto un file "nota" a git, in quanto è nell'indice, aggiungendo il nome di quel file per .gitignore
non ha alcun effetto. Git già tiene traccia del file e continuerà a seguirlo.
In sostanza, il file .gitignore
non è in realtà un elenco di file da ignorare. Invece, quando git incontra un caso di un file "non tracciato" e sta per segnalarlo, i contenuti dello .gitignore
sono una lista di nomi che dovrebbe sopprimere.
Per il file .gitignore
sé che probabilmente vuole solo git add
i cambiamenti e li impegnano, dal momento che, come regola generale, chiunque clonare il repository probabilmente vuole ignorare lo stesso insieme di file non monitorate, in modo .gitignore
dovrebbero essere tracciati e Versione controllata.
Per il file XML, tuttavia, potrebbe trattarsi di "contenuto generato" che non si desidera controllare con la versione, ma si desidera comunque mantenerlo nella struttura di lavoro. Questo è un po 'un problema, perché git lo sta già rintracciando e insisterà per continuare a controllare la versione del file.
Cosa si può fare a questo punto è rimuoverla dall'indice di git, ma non dal lavoro-albero:
git rm --cached mllib/pom.xml
va bene per quanto si va (git rimuove il file dal indice e il il prossimo commit mancherà di quel file), ma creerà problemi se tornerai a un commit che ha il file, perché git vedrà che ha bisogno di creare il file - ti stai spostando da un commit in cui il il file non esiste (uno recente) in un commit in cui esiste (uno vecchio) e potrebbe lamentare che il contenuto di quel file sarà sbalordito. Oppure, anche se questa parte funziona, se si passa a una versione recente, allontanandosi dalla vecchia versione, git confronterà le vecchie e le nuove versioni e vedrà che il file è stato rimosso ... e sarà rimuoveremllib/pom.xml
.
Ri-modificare, 20 ott 2016: Utilizzare git update-index --skip-worktree
, non git update-index --assume-unchanged
. Questo imposta un bit più potente nell'indice. Vedi Git - Difference Between 'assume-unchanged' and 'skip-worktree'.Edit: come Schwern noted in a comment below, è possibile utilizzare git update-index --assume-unchanged
per rendere git nemmeno guardare il file per le modifiche, piuttosto che utilizzare git rm --cached
di tirarla fuori dell'indice (vedi this answer per i dettagli). Anche questo va bene fino in fondo, potresti doverlo fare di nuovo (o far fare a tutti i tuoi colleghi da soli) su qualsiasi altro/nuovo clone.
(È possibile recuperare da quest'ultimo utilizzando git show <oldrev>:mllib/pom.xml > mllib/pom.xml
per scaricare il file sullo standard output, e reindirizzare l'output standard per ricreare il file.)
Inconceivable!
(Più seriamente, tutti fanno questo errore Probabilmente gitignore
era il nome sbagliato, e qualcosa come git-screen-away-untracked
avrebbe potuto essere migliore, se klunkier.Tuttavia, elencando un file in .gitignore
ha anche altri effetti collaterali: in particolare , è permits Git to clobber such files in alcuni casi)
non ignorare l'ignora – Anthony
Uhhhh ... non si potrebbe voler ignorare '.gitignore'. –
Se rimuovo .gitignore, viene visualizzato in "Modifiche non pianificate per il commit" – javadba