Ignorare le modifiche ai file con Git

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Git non deve tenere traccia di ogni file nel progetto. I file temporanei dell'ambiente di sviluppo, gli output di test e i log sono tutti esempi di file che probabilmente non devono essere rilevati.

È possibile usare vari meccanismi per comunicare a Git quali file nel progetto non tenere traccia e per assicurarsi che Git non invierà modifiche a tali file. Per i file che Git non tiene traccia, è possibile usare un .gitignore file o exclude . Per i file che Git tiene traccia, è possibile indicare a Git di interrompere il rilevamento e ignorare le modifiche.

In questo articolo vengono illustrate le operazioni seguenti:

  • Ignorare le modifiche apportate ai file non registrati usando un .gitignore file.
  • Ignorare le modifiche apportate ai file non registrati usando un exclude file.
  • Arrestare il rilevamento di un file e ignorare le modifiche usando il git update-index comando .
  • Arrestare il rilevamento di un file e ignorare le modifiche usando il git rm comando .

Usare un file con estensione gitignore

È possibile indicare a Git di non tenere traccia di determinati file nel progetto aggiungendo e configurando un file con estensione gitignore . Le voci in un .gitignore file si applicano solo ai file non registrati. Non impediscono a Git di segnalare modifiche ai file rilevati. I file rilevati sono file di cui è stato eseguito il commit ed esistono nell'ultimo snapshot Git.

Ogni riga di un .gitignore file specifica un criterio di ricerca di file relativo al percorso del .gitignore file. La sintassi .gitignore è flessibile e supporta l'uso di caratteri jolly per specificare singoli o più file in base al nome, all'estensione e al percorso. Git associa .gitignore i modelli di ricerca ai file nel progetto per determinare quali file ignorare.

In genere, si aggiunge un .gitignore file alla cartella radice del progetto. Tuttavia, è possibile aggiungere un .gitignore file a qualsiasi cartella del progetto per informare Git quali file ignorare all'interno di tale cartella e le relative sottocartelle in qualsiasi profondità annidata. Per più .gitignore file, i criteri di ricerca di file specificati da un .gitignore file all'interno di una cartella hanno la precedenza sui modelli specificati da un .gitignore file all'interno di una cartella padre.

È possibile creare manualmente un .gitignore file e aggiungervi voci del criterio di file. In alternativa, è possibile risparmiare tempo scaricando un .gitignore modello per l'ambiente di sviluppo dal repository GitHub gitignore. Uno dei vantaggi dell'uso di un .gitignore file è che è possibile eseguire il commit delle modifiche e condividerle con altri utenti.

Nota

Visual Studio crea automaticamente un .gitignore file per l'ambiente di sviluppo di Visual Studio quando si crea un repository Git.

Visual Studio 2022 offre un'esperienza di controllo della versione Git tramite il menu Git, le modifiche Git e i menu di scelta rapida in Esplora soluzioni. Visual Studio 2019 versione 16.8 offre anche l'interfaccia utente Git di Team Explorer . Per altre informazioni, vedere la scheda Visual Studio 2019 - Team Explorer .

Nella finestra Modifiche Git fare clic con il pulsante destro del mouse su qualsiasi file modificato che si vuole ignorare da Git e quindi scegliere Ignora questo elemento locale o Ignora questa estensione. Queste opzioni di menu non esistono per i file rilevati.

Screenshot delle opzioni del menu di scelta rapida per i file modificati nella finestra Modifiche Git in Visual Studio.

L'opzione Ignora questa voce locale aggiunge una nuova voce al .gitignore file e rimuove il file selezionato dall'elenco dei file modificati.

L'opzione Ignora questa estensione aggiunge una nuova voce al .gitignore file e rimuove tutti i file con la stessa estensione del file selezionato dall'elenco dei file modificati.

Entrambe le opzioni creano un .gitignore file se non esiste già nella cartella radice del repository e aggiunge una voce.

Modificare un file gitignore

Ogni voce nel .gitignore file è: un criterio di ricerca di file che specifica i file da ignorare, un commento che inizia con un segno di numero (#) o una riga vuota (per la leggibilità). La .gitignore sintassi è flessibile e supporta l'uso di caratteri jolly per specificare singoli o più file in base al nome, all'estensione e al percorso. Tutti i percorsi per i modelli di ricerca di file sono relativi al .gitignore file.

Ecco alcuni esempi di modelli di ricerca di file comuni:

# Ignore all files with the specified name.
# Scope is all repo folders.
config.json

# Ignore all files with the specified extension.
# Scope is all repo folders.
*.json

# Add an exception to prevent ignoring a file with the specified name.
# Scope is all repo folders.
!package.json

# Ignore a file with the specified name.
# Scoped to the 'logs' subfolder.
/logs/test.logfile

# Ignore all files with the specified name.
# Scoped to the 'logs' subfolder and all folders beneath it.
/logs/**/test.logfile

# Ignore all files in the 'logs' subfolder.
/logs/

Non appena si modifica un .gitignore file, Git aggiorna l'elenco dei file ignorati.

Nota

Gli utenti di Windows devono usare una barra (/) come separatore di percorso in un .gitignore file, anziché usare una barra rovesciata (\). Tutti gli utenti devono aggiungere una barra finale quando si specifica una cartella.

Usare un file .gitignore globale

È possibile designare un .gitignore file come file ignorato globale che si applica a tutti i repository Git locali. A tale scopo, usare il git config comando come segue:

git config core.excludesfile <gitignore file path>

Un file globale .gitignore consente di assicurarsi che Git non esegua il commit di determinati tipi di file, ad esempio i file binari compilati, in qualsiasi repository locale. I modelli di ricerca di file in un file specifico .gitignore del repository hanno la precedenza sui modelli in un file globale .gitignore .

Usare un file di esclusione

È anche possibile aggiungere voci per i modelli di ricerca di file al exclude file nella .git/info/ cartella del repository locale. Il exclude file indica a Git quali file non registrati ignorare. Usa la stessa sintassi per i modelli di ricerca di file come file .gitignore .

Le voci in un exclude file si applicano solo ai file non registrati. Non impediscono a Git di segnalare modifiche ai file di cui è già stato eseguito il commit. Esiste un exclude solo file per repository.

Poiché Git non esegue il commit o il push del exclude file, è possibile usarlo in modo sicuro per ignorare i file nel sistema locale senza influire su altri utenti.

Usare git update-index per ignorare le modifiche

A volte è utile arrestare temporaneamente il rilevamento di un file di repository locale e fare in modo che Git ignori le modifiche apportate al file. Ad esempio, è possibile personalizzare un file di impostazioni per l'ambiente di sviluppo senza il rischio di eseguire il commit delle modifiche. A tale scopo, è possibile eseguire il git update-index comando con il skip-worktree flag :

git update-index --skip-worktree <file path>

Per riprendere il rilevamento, eseguire il git update-index comando con il --no-skip-worktree flag .

In alternativa, è possibile arrestare temporaneamente il rilevamento di un file e fare in modo che Git ignori le modifiche apportate al file usando il git update-index comando con il assume-unchanged flag . Questa opzione è meno efficace del skip-worktree flag, perché un'operazione Git pull che modifica il contenuto del file può ripristinare il assume-unchanged flag.

git update-index --assume-unchanged <file path>

Per riprendere il rilevamento, eseguire il git update-index comando con il --no-assume-unchanged flag .

Usare git rm per ignorare le modifiche

Le voci in un .gitignore file o exclude non hanno alcun effetto sui file già tracciati da Git. Git tiene traccia dei file di cui è stato eseguito il commit in precedenza. Per rimuovere definitivamente un file dallo snapshot Git in modo che Git non lo tenga più traccia, ma senza eliminarlo dal file system, eseguire i comandi seguenti:

git rm --cached <file path>
git commit <some message>

Usare quindi una .gitignore voce di file o exclude per impedire a Git di segnalare modifiche al file.

Passaggi successivi