Vad är en .gitignore-fil och hur konfigurerar du den?

En .gitignore-fil är en textfil placerad i ditt git-arkiv som berättar git att inte spåra vissa filer och mappar som du inte vill att ska laddas upp till ditt huvudförvar. Den har många användningsområden och du behöver nästan alltid konfigurera den om du skapar en ny repo.

Vad & # 8217 ; s Poängen med .gitignore?

I de flesta projekt är det skillnad mellan kod/konfiguration och genererade filer från den koden eller konfigurationen. Det senare är vanligtvis inte användbart och kan vanligtvis ignoreras.

Vanligtvis vill du bara att koden och konfigurationen ska spåras genom git. Detta beror på att de genererade filerna är flyktiga, och om du tar bort dem kan du bara återskapa dem igen. Det är ofta ingen anledning att ladda upp dem, eftersom de helt enkelt kommer att komplicera saker och orsaka onödiga sammanslagningskonflikter.

Detta är en bred definition, så låt oss titta på ett exempel. I Node JS-projekt finns det en mapp som heter node_modules som innehåller alla externa paket som din kod behöver köras. Du kan radera den här katalogen och helt bygga om den genom att köra npm install, som använder package.json-konfigurationen för att söka efter paket.

Så vad är poängen med att ha mappen nod_modules i Git? Det finns inte riktigt, eftersom det är mer komplicerat, kan orsaka problem och kan till och med drastiskt öka storleken på Git repo i många fall.

Annons

Om du ignorera hela katalogen, alla dina kollegor kan fortfarande generera sin egen lokala kopia från filen package.json. Så istället bör endast package.json spåras i Git. De flesta saker som läggs till .gitignore följer detta mönster. Bygg artefakter, som en ./bin/-mapp, blir inte engagerade eftersom de är ett direkt resultat av själva koden.

Andra saker kan också läggas till .gitignore för enkelhets skull. MacOS genererar systemfiler som heter .DS_store, som du alltid kan ignorera. Kanske lagrar du API-nycklar i .env/att du inte vill spåras i källkontrollen, du kan också lägga till dem. Cachar, loggar och andra utdata kan vanligtvis ignoreras.

Använda .gitignore

Du måste skapa en fil som heter .gitignore, utan tillägg, i roten till ditt projekt där .git-katalogen finns. Du kan göra detta från din webbläsare eller från kommandoraden med vilken CLI-textredigerare som helst:

nano .gitignore

Du kan konfigurera detta på många sätt, men de viktigaste verktygen du har är:

  • * jokertecken, som matchar valfri text och kan användas för att matcha valfri katalog eller fil oavsett tillägg.
  • !, som fungerar som en slags vitlista som negerar en tidigare utesluten fil. Huvudfånget med detta är att den bara vitlistar filen om den exkluderades direkt och inte fungerar för filer i kataloger som helt uteslutits.
  • **, som matchar allt rekursivt till kataloger. Till exempel kommer **/*. Json att matcha vilken JSON-fil som helst, oavsett var den är, och src/** matchar alla filer i mappen rekursivt. Detta är användbart när du vill vitlista och inte ignorera hela katalogen.

Till exempel kan en Node JS gitignore se ut som följande:

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

Vitlista filer med! kan vara mycket användbart för många konfigurationer. I ett av mina projekt hade jag till exempel ett verktyg som heter steamcmd som laddar ner beroenden för spelservrar från Steam. Det här verktyget är förpackat i en enda bärbar körbar, men det producerar en hel del skräp som jag inte vill spåras i Git.

Annons

Lösningen var att ignorera allt i mappen, men vitlista den körbara. Detta fungerar för alla bärbara körbara filer som expanderar så här eller producerar annat onödigt skräp i katalogen.

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

gitignore använder också några andra Unix-globmönster för matchande strängar, till exempel ett frågetecken för att matcha enstaka tecken, eller [az] som matchar teckenuppsättningar.

Du kan också skriva flera .gitignore-filer som kan matcha filer i förhållande till sig själva. Det här är inte så användbart eftersom du bara kan inkludera reglerna i rotfilen, vilket är lättare att spåra, men det kan i vissa fall hjälpa till med repetition av kod. Lösningen är dock att använda teckenuppsättningar för att matcha flera kataloger. Att till exempel matcha stora och små bokstäver med en uppsättning:

# Skapa resultat [Dd] ebug/[Dd] ebugPublic/[Rr] elease/[Rr] eleases/

Om du har problem med din .gitignore-konfiguration kan du felsöka det med Git-kommandot check-ignorera:

git check-ignore -v testfile.json

Global .gitignore

Git har också en global inställning för .gitignore, men det borde inte & # 8217; kan inte användas i de flesta fall. Detta beror på att den globala .gitignore på din dator inte gäller för dina kollegor, och bara för åtaganden som gjorts med din instans av Git.

Om du vill ställa in det ändå kan du göra så med följande kommando:

git config –global core.excludesfile ~/.globalignore

Tvinga eller stashing ignorerade filer

Tvinga att begå är vanligtvis en dålig idé & # 8212; du borde antagligen lägga till en vitlista för den här specifika filen, eftersom uppdateringarna till den här filen kommer att spåras en gång. Men om du vill begå något manuellt kan du köra git add med –force-parametern:

git add -f debug.log Annons

På samma sätt kan git stash också stash lokala förändringar till ignorerade filer, vilket faktiskt kan vara användbart eftersom det inte påverkar fjärranslutningen:

git stash –all


Posted

in

by

Tags: