Git Ignorare file e directory con un file .gitignore

Esempio

Puoi fare in modo che Git ignori determinati file e directory, ovvero li escluda dal tracciamento di Git, creando uno o più file .gitignore nel tuo repository.

Nei progetti software, .gitignore contiene in genere un elenco di file e / o directory generati durante il processo di creazione o in fase di esecuzione. Le voci nel file .gitignore possono includere nomi o percorsi che puntano a:

  1. risorse temporanee come cache, file di registro, codice compilato, ecc.
  2. file di configurazione locali che non dovrebbero essere condivisi con altri sviluppatori
  3. file contenenti informazioni segrete, come password di accesso, chiavi e credenziali

Quando vengono create nella directory di livello superiore, le regole si applicano in modo ricorsivo a tutti i file e sottodirectory in tutto il repository. Quando vengono creati in una sottodirectory, le regole si applicano a quella specifica directory e alle sue sottodirectory.

Quando un file o una directory viene ignorata, non sarà:

  1. monitorato da Git
  2. segnalato da comandi come git status o git diff
  3. messo in scena con comandi come git add -A

Nel caso insolito che è necessario ignorare i file tracciati, prestare particolare attenzione. Vedi: Ignora i file che sono già stati impegnati in un repository Git .


Esempi

Ecco alcuni esempi generici di regole in un file .gitignore , basato su modelli di file glob :

# Lines starting with `#` are comments.

# Ignore files called 'file.ext'
file.ext

# Comments can't be on the same line as rules!
# The following line ignores files called 'file.ext # not a comment'
file.ext # not a comment 

# Ignoring files with full path.
# This matches files in the root directory and subdirectories too.
# i.e. otherfile.ext will be ignored anywhere on the tree.
dir/otherdir/file.ext
otherfile.ext

# Ignoring directories
# Both the directory itself and its contents will be ignored.
bin/
gen/

# Glob pattern can also be used here to ignore paths with certain characters.
# For example, the below rule will match both build/ and Build/
[bB]uild/

# Without the trailing slash, the rule will match a file and/or
# a directory, so the following would ignore both a file named `gen`
# and a directory named `gen`, as well as any contents of that directory
bin
gen

# Ignoring files by extension
# All files with these extensions will be ignored in
# this directory and all its sub-directories.
*.apk
*.class

# It's possible to combine both forms to ignore files with certain
# extensions in certain directories. The following rules would be
# redundant with generic rules defined above.
java/*.apk
gen/*.class

# To ignore files only at the top level directory, but not in its
# subdirectories, prefix the rule with a `/`
/*.apk
/*.class

# To ignore any directories named DirectoryA 
# in any depth use ** before DirectoryA
# Do not forget the last /, 
# Otherwise it will ignore all files named DirectoryA, rather than directories
**/DirectoryA/
# This would ignore 
# DirectoryA/
# DirectoryB/DirectoryA/ 
# DirectoryC/DirectoryB/DirectoryA/
# It would not ignore a file named DirectoryA, at any level

# To ignore any directory named DirectoryB within a 
# directory named DirectoryA with any number of 
# directories in between, use ** between the directories
DirectoryA/**/DirectoryB/
# This would ignore 
# DirectoryA/DirectoryB/ 
# DirectoryA/DirectoryQ/DirectoryB/ 
# DirectoryA/DirectoryQ/DirectoryW/DirectoryB/

# To ignore a set of files, wildcards can be used, as can be seen above.
# A sole '*' will ignore everything in your folder, including your .gitignore file.
# To exclude specific files when using wildcards, negate them.
# So they are excluded from the ignore list:
!.gitignore 

# Use the backslash as escape character to ignore files with a hash (#)
# (supported since 1.6.2.1)
\#*#

La maggior parte dei file .gitignore sono standard in varie lingue, quindi per iniziare, ecco un insieme di file .gitignore di esempio elencati per lingua da cui clonare o copiare / modificare nel progetto. In alternativa, per un nuovo progetto si può considerare la generazione automatica di un file di avviamento utilizzando uno strumento online .


Altre forme di .gitignore

.gitignore file .gitignore sono destinati al commit come parte del repository. Se si desidera ignorare determinati file senza applicare le regole di ignoranza, ecco alcune opzioni:

  • Modifica il file .git/info/exclude (usando la stessa sintassi di .gitignore ). Le regole saranno globali nell'ambito del repository;
  • Imposta un file gitignore globale che applicherà le regole di ignoranza a tutti i tuoi repository locali:

Inoltre, puoi ignorare le modifiche locali ai file tracciati senza modificare la configurazione git globale con:

  • git update-index --skip-worktree [<file>...] : per modifiche locali minori
  • git update-index --assume-unchanged [<file>...] : per file pronti per la produzione, non modificabili a monte

Vedi maggiori dettagli sulle differenze tra questi ultimi flag e la documentazione di git update-index per ulteriori opzioni.


Pulizia dei file ignorati

Puoi usare git clean -X per ripulire i file ignorati:

git clean -Xn #display a list of ignored files
git clean -Xf #remove the previously displayed files

Nota: -X (cappucci) pulisce solo i file ignorati. Usa -x (senza maiuscole) per rimuovere anche i file non tracciati.

Vedi la documentazione git clean per maggiori dettagli.


Vedi il manuale di Git per maggiori dettagli.