Lavorando con Git, capita di aggiungere file a .gitignore per poi ritrovarli comunque come modified e rischiare di portarli sul progetto (push sul repository).
Di solito lo scopo dell’aggiungere file e/o directory a .gitignore è quello di non voler propagare a livello di progetto, ovvero di repository, modifiche utili al solo livello personale. Un esempio su tutti potrebbe essere il file di configurazione della connessione al database.
Per quanto mi riguarda, questa cosa non mi era mai accaduta lavorando su linux, mentre mi sta accadendo sempre più spesso su Windows. Non so se dipenda dal solito modo di trattare il BOM da parte di questo sistema operativo, ma tant’è.
POSSIBILI SOLUZIONI
Sono letteralmente impazzito cercando una soluzione efficace al problema. In giro la proposta più in voga – o varianti di essa – è quella di usare git rm --cached nomedirectory/nomefile
per poi eseguire commit e push.
Ma è quello che mi ero proposto inizialmente? Per non propagare una mia modifica, che serve solo a me nella mia postazione locale, alla fin fine rimuovo quel file dal repository. E’ un riassunto drastico di quel che accade, ma in ogni caso una volta eseguito git rm --cached nomedirectory/nomefile
il file passerà da modified a deleted? No, eviterei.
Una soluzione potrebbe essere invece git update-index --assume-unchanged percorso/file
In questo modo suggeriamo a git di fidarsi, e ritenere il file aggiornato all’indice. git status
non mostrerà eventuali modifiche al file stesso e git fallirà, senza errori, se tenterà di aggiornare il file nell’index a causa, ad esempio, di un commit.
E’ evidente che si hanno pro e contro anche in questo caso. Qualora si voglia ripristinare la situazione – perchè magari a livello di repository il file è stato effettivamente modificato e ci serve aggiornarlo – è sufficiente git update-index --no-assume-unchanged percorso/file
e a questo punto gestire la situazione manualmente (per eventuali pull, merge…).
La documentazione ufficiale è qui.
Segui @andymnc (Andrea Manconi) su Twitter per essere sempre aggiornato su guide ed articoli