Git in pillole: il file .gitignore

Spread the love
gitignore
git

.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.

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.

Altri articoli del blog su git

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.