Certo, lo faccio di tanto in tanto usando
git update-index --assume-unchanged [<file> ...]
Per annullare e ricominciare il tracciamento (se hai dimenticato quali file non sono stati rintracciati, vedi questa domanda ):
git update-index --no-assume-unchanged [<file> ...]
Documentazione pertinente :
- [no-] assume-invariato
Quando viene specificato questo flag, i nomi degli oggetti registrati per i percorsi non vengono aggiornati. Al contrario, questa opzione imposta / annulla il bit "assume invariato" per i percorsi. Quando il bit "assume invariato" è attivo, l'utente promette di non modificare il file e consente a Git di supporre che il file dell'albero di lavoro corrisponda a ciò che è registrato nell'indice. Se vuoi cambiare il file dell'albero di lavoro, devi disinserire il bit per dire a Git. Questo a volte è utile quando si lavora con un grande progetto su un filesystem che ha una lstat(2)
chiamata di sistema molto lenta (es. Cifs).
Git fallirà (con garbo) nel caso in cui debba modificare questo file nell'indice, ad es. Quando si unisce in un commit; pertanto, nel caso in cui il file presupposto non tracciato venga modificato a monte, sarà necessario gestire la situazione manualmente.
Fallire con garbo in questo caso significa che, se ci sono cambiamenti a monte di quel file (modifiche legittime, ecc.) Quando fai un pull, dirà:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
e rifiuterà di fondersi.
A quel punto, puoi superarlo ripristinando le modifiche locali, ecco un modo:
$ git checkout filename.ext
quindi tirare di nuovo e modificare nuovamente il file locale, oppure è possibile impostare –no-assume-unchanged
e si può fare normale stash e unire, ecc. a quel punto.