Che cos'è un file .gitignore e come lo si configura?

0
300

Un file .gitignore è un file di testo inserito nel tuo repository git che dice git per non tenere traccia di determinati file e cartelle che non desideri vengano caricati nel tuo repository principale. Ha molti usi e dovrai quasi sempre configurarlo se stai configurando un nuovo repository.

Cosa&#8217 ;s Il punto di .gitignore?

Nella maggior parte dei progetti, c'è una differenza tra codice/config e file generati da quel codice o configurazione. Quest'ultimo di solito non è utile e generalmente può essere ignorato.

Di solito, vuoi solo che il codice e la configurazione vengano tracciati tramite git. Questo perché i file generati sono effimeri e, se li elimini, puoi semplicemente rigenerarli di nuovo. Spesso non ha senso caricarli, poiché complicheranno semplicemente le cose e causeranno conflitti di unione non necessari.

Questa è una definizione ampia, quindi diamo un'occhiata a un esempio. Nei progetti Node JS è presente una cartella denominata node_modules che contiene tutti i pacchetti esterni necessari per l'esecuzione del codice. Puoi eliminare questa directory e ricostruirla completamente eseguendo npm install, che utilizza la configurazione package.json per cercare i pacchetti.

Quindi qual è il punto di avere la cartella node_modules in Git? Non ce n'è uno davvero, poiché è più complicato, può causare problemi e in molti casi può persino aumentare drasticamente le dimensioni del repository Git.

Pubblicità

Se tu ignora l'intera directory, tutti i tuoi colleghi possono comunque generare la propria copia locale dal file package.json. Quindi, invece, solo package.json dovrebbe essere monitorato in Git. La maggior parte delle cose che vengono aggiunte a .gitignore seguono questo schema. Gli artefatti di compilazione, come una cartella ./bin/ , non vengono sottoposti a commit poiché sono un risultato diretto del codice stesso.

Altre cose possono anche essere aggiunte a .gitignore per comodità. MacOS genera file di sistema chiamati .DS_store, che puoi sempre ignorare. Forse memorizzi chiavi API in .env/ che non vuoi che vengano monitorate nel controllo del codice sorgente, puoi aggiungere anche quelle. Cache, log e altro output di solito possono essere ignorati.

Uso di .gitignore

Dovrai creare un file chiamato .gitignore, senza estensioni, nella radice del tuo progetto in cui si trova la tua directory .git. Puoi farlo dal tuo browser di file o dalla riga di comando con qualsiasi editor di testo CLI:

nano .gitignore

Puoi configurarlo in molti modi, ma gli strumenti principali che hai sono:

  • * caratteri jolly, che corrispondono a qualsiasi testo e possono essere utilizzati per corrisponde a qualsiasi directory o file indipendentemente dall'estensione.
  • !, che funziona come una sorta di whitelist che nega un file precedentemente escluso. Il problema principale è che inserisce nella whitelist il file solo se è stato escluso direttamente e non funzionerà per i file nelle directory che sono state completamente escluse.
  • **, che corrisponde a qualsiasi cosa in modo ricorsivo nelle directory. Ad esempio, **/*.json associerà a qualsiasi file JSON indipendentemente da dove si trova e src/** abbinerà a tutti i file nella cartella in modo ricorsivo. Ciò è utile quando si desidera inserire nella whitelist e non ignorare l'intera directory.

Ad esempio, un gitignore di Node JS potrebbe essere simile al seguente:

node_modules/build/npm-debug.log .env .env.test .env.production .DS_Store .npm .eslintcache logs/*.log npm-debug.log*

Elenco dei file con ! può essere molto utile per molte configurazioni. Ad esempio, in uno dei miei progetti avevo uno strumento chiamato steamcmd che scarica le dipendenze per i server di gioco da Steam. Questo strumento è racchiuso in un singolo eseguibile portatile, ma produce un sacco di spazzatura che non voglio che venga tracciata in Git.

Pubblicità

La soluzione era ignorare tutto nella cartella, ma inserire nella whitelist l'eseguibile. Funzionerà per qualsiasi eseguibile portatile che si espande in questo modo o produce spazzatura altrimenti non necessaria nella directory.

Project/steamcmd/** !Project/steamcmd/steamcmd.exe

gitignore utilizza anche altri modelli di globbing Unix per stringhe corrispondenti, ad esempio un punto interrogativo per la corrispondenza di un singolo carattere o [az] che corrisponderà ai set di caratteri.

Puoi anche scrivere più file .gitignore che possono corrispondere a file relativi a se stessi. Questo non è molto utile in quanto puoi semplicemente includere le regole nel file radice, che è più facile da tenere traccia, ma in alcuni casi potrebbe aiutare con la ripetizione del codice. Tuttavia, la soluzione alternativa consiste nell'utilizzare i set di caratteri in modo che corrispondano a più directory. Ad esempio, confrontando le directory maiuscole e minuscole con un set:

# Crea risultati [Dd]ebug/[Dd]ebugPublic/[Rr]elease/[Rr]eleases/

Se hai problemi con la tua configurazione .gitignore, puoi eseguirne il debug con il comando check-ignore Git:

git check-ignore -v testfile.json

.gitignore globale

Git ha anche un'impostazione globale per .gitignore, ma non dovrebbe’ t davvero essere utilizzato nella maggior parte dei casi. Questo perché il .gitignore globale sul tuo computer non si applica ai tuoi colleghi e solo ai commit effettuati con la tua istanza di Git.

Se desideri impostarlo comunque, puoi farlo quindi con il seguente comando:

git config –global core.excludesfile ~/.globalignore

Forza il commit o l'archiviazione dei file ignorati

L'esecuzione forzata è generalmente una cattiva idea — probabilmente dovresti aggiungere una whitelist per questo file specifico, perché una volta confermato, gli aggiornamenti a questo file non verranno monitorati. Ma, se vuoi eseguire il commit manuale di qualcosa, puoi eseguire git add con il parametro –force :

git add -f debug.log Advertisement

Analogamente, git stash può anche conservare le modifiche locali a file ignorati, che possono effettivamente essere utili in quanto non influenzeranno il repository remoto:

git stash –all