.gitignore
o .git/info/exclude
? Vediamo le differenze e il perché a volte Git sembra ignorare le nostre direttive sull’esclusione di alcuni file dal ciclo di vita del software.
Sommario
Differenza tra .gitignore e .git/info/exclude
Entrambi i file servono a Git per stabilire quali file non entrano nel ciclo di versionamento.
Essi agiscono ad un diverso livello.
Il file .git/info/exclude serve per escludere i file nel proprio clone locale; se qualcuno che collabora con noi non ha escluso gli stessi file che abbiamo escluso noi, potremmo ritrovarci – se facciamo un clone o un fetch – file che sono entrati nel versionamento nell’origin ma che io non ho perché esclusi, o viceversa. Quindi è bene, quando si devono escludere dei file globalmente (per tutti i programmatori) agire sul file .gitignore
che invece viene versionato – per cui ogni repository locale se lo trova. Se dobbiamo agire in modo più granulare sui file da versionare (o meno) directory per directory, è possibile scrivere un apposito file .gitgnore
in ogni directory in cui serve.
Git sembra ignorare la direttiva di ignorare file
Ho messo dei file da escludere nel file .git/info/exclude
(o in .gitignore
) ma continuo a vederli come new file quando eseguo il comando git status:
$ git status Sul branch master Your branch is up to date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: app/Http/Controllers/BaseController.php new file: storage/logs/laravel-2020-07-22.log new file: storage/logs/laravel-2020-07-23.log ...
In particolare non voglio che i file di log entrino nel versionamento. Ho però inserito correttamente la riga
storage/logs*
in entrambi i file .gitignore
e .git/info/exclude
. Come mai Git continua a mostrarmeli come file da versionare?
Git utilizza il file .gitignore
nel momento in cui aggiunge i file; una volta aggiunti all’indice dei file da versionare Git continua a considerarli tali, a dipetto di modifiche successive dei file di gitignore. Quindi ci sono due modi per uscire dall’impasse:
- cancellare fisicamente i file, ma è l’opzione più stupida
git rm storage/logs/*
- cancellare la cache:
git rm --cached storage/logs/*
Infatti l’opzione --cached
indica a Git di togliere i file dall’indice ma non dal file system.
Ho trovato queste indicazioni in un paio di risposte di fourm 1 e 2.
Commenti recenti