Svenska ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.52.0

NAMN

gitignore - Anger avsiktligt ospårade filer att ignorera

SYNOPSIS

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

BESKRIVNING

En gitignore-fil anger avsiktligt ospårade filer som Git ska ignorera. Filer som redan spåras av Git påverkas inte; se ANTECKNINGARNA nedan för mer information.

Varje rad i en gitignore-fil anger ett mönster. När Git bestämmer sig för om en sökväg ska ignoreras kontrollerar de normalt gitignore-mönster från flera källor, med följande prioritetsordning, från högst till lägst (inom en prioritetsnivå avgör det sista matchande mönstret resultatet):

  • Mönster läses från kommandoraden för de kommandon som stöder dem.

  • Patterns read from a .gitignore file in the same directory as the path, or in any parent directory (up to the top-level of the working tree), with patterns in the higher level files being overridden by those in lower level files down to the directory containing the file. These patterns match relative to the location of the .gitignore file. A project normally includes such .gitignore files in its repository, containing patterns for files generated as part of the project build.

  • Mönster lästa från $GIT_DIR/info/exclude.

  • Mönster lästa från filen som anges av konfigurationsvariabeln core.excludesFile.

Vilken fil man ska placera ett mönster i beror på hur mönstret är tänkt att användas.

  • Mönster som ska vara versionskontrollerade och distribueras till andra förvar via klon (dvs. filer som alla utvecklare vill ignorera) ska läggas i en .gitignore-fil.

  • Mönster som är specifika för ett visst förvar men som inte behöver delas med andra relaterade förvar (t.ex. hjälpfiler som finns inuti förvaret men är specifika för en användares arbetsflöde) ska placeras i filen $GIT_DIR/info/exclude.

  • Mönster som en användare vill att Git ska ignorera i alla situationer (t.ex. säkerhetskopior eller temporära filer som genereras av användarens valda editor) hamnar vanligtvis i en fil som anges av core.excludesFile i användarens ~/.gitconfig. Standardvärdet är $XDG_CONFIG_HOME/git/ignore. Om $XDG_CONFIG_HOME antingen inte är angivet eller är tomt, används $HOME/.config/git/ignore istället.

De underliggande Git-verktygen för rörmokeri, såsom git ls-files och git read-tree, läser gitignore-mönster som anges av kommandoradsalternativ, eller från filer som anges av kommandoradsalternativ. Git-verktyg på högre nivå, såsom git status och git add, använder mönster från källorna som anges ovan.

MÖNSTERFORMAT

  • En tom rad matchar inga filer, så den kan fungera som avgränsare för läsbarhet.

  • En rad som börjar med # fungerar som en kommentar. Sätt ett bakåtsnedstreck ("\") framför den första hashen för mönster som börjar med en hash.

  • Efterföljande mellanslag ignoreras om de inte anges i citattecken med bakåtsnedstreck ("\").

  • Ett valfritt prefix "!" som negerar mönstret; alla matchande filer som exkluderats av ett tidigare mönster kommer att inkluderas igen. Det är inte möjligt att inkludera en fil igen om en förälderkatalog till den filen är exkluderad. Git listar inte exkluderade kataloger av prestandaskäl, så mönster på ingående filer har ingen effekt, oavsett var de definieras. Sätt ett bakåtsnedstreck ("\") framför det första "!" för mönster som börjar med en bokstavlig "!, till exempel "\!viktigt!.txt".

  • Snedstrecket "/" används som katalogavgränsare. Avgränsare kan förekomma i början, mitten eller slutet av sökmönstret .gitignore.

  • Om det finns ett avskiljare i början eller mitten (eller båda) av mönstret, är mönstret relativt till katalognivån för den specifika .gitignore-filen. Annars kan mönstret också matcha på vilken nivå som helst under .gitignore-nivån.

  • Om mönstret avslutas med en avskiljare matchas endast kataloger, annars kan mönstret matcha både filer och kataloger.

  • Till exempel matchar mönstret doc/frotz/ katalogen doc/frotz, men inte katalogen a/doc/frotz; däremot matchar frotz/ och a/frotz som är en katalog (alla sökvägar är relativa från .gitignore-filen).

  • En asterisk "*" matchar allt utom ett snedstreck. Tecknet "?" matchar vilket tecken som helst utom "/". Intervallnotationen, t.ex. [a-zA-Z], kan användas för att matcha ett av tecknen i ett intervall. Se fnmatch(3) och FNM_PATHNAME-flaggan för en mer detaljerad beskrivning.

  • Ett bakåtsnedstreck ("\") kan användas för att undanröja vilket tecken som helst. Till exempel matchar "\*" en asterisk (och "\a" matchar "a", även om det inte finns något behov av att undanröja där). Precis som med fnmatch(3) är ett omvänt snedstreck i slutet av ett mönster ett ogiltigt mönster som aldrig matchar.

Två asterisker i rad ("**") i mönster som matchar det fullständiga sökvägsnamnet kan ha en speciell betydelse:

  • Ett inledande "**" följt av ett snedstreck betyder matchning i alla kataloger. Till exempel matchar "**/foo" filen eller katalogen "foo" var som helst, samma som mönstret "foo". "**/foo/bar" matchar filen eller katalogen "bar" var som helst som ligger direkt under katalogen "foo".

  • Ett efterföljande "/**" matchar allt inuti. Till exempel matchar "abc/**" alla filer i katalogen "abc", relativt till platsen för .gitignore-filen, med oändligt djup.

  • Ett snedstreck följt av två asterisker i rad, sedan ett snedstreck, matchar noll eller fler kataloger. Till exempel matchar "a/**/b" "a/b", "a/x/b", "a/x/y/b" och så vidare.

  • Andra på varandra följande asterisker betraktas som vanliga asterisker och kommer att matcha enligt tidigare regler.

KONFIGURATION

Den valfria konfigurationsvariabeln core.excludesFile anger en sökväg till en fil som innehåller mönster av filnamn som ska exkluderas, liknande $GIT_DIR/info/exclude. Mönster i exkluderingsfilen används utöver de i $GIT_DIR/info/exclude.

NOTERINGAR

Syftet med gitignore-filer är att säkerställa att vissa filer som inte spåras av Git förblir ospårade.

För att sluta spåra en fil som för närvarande spåras, använd git rm --cached för att ta bort filen från indexet. Filnamnet kan sedan läggas till i .gitignore-filen för att förhindra att filen återinförs i senare incheckningar.

Git följer inte symboliska länkar när den öppnar en .gitignore-fil i arbetsträdet. Detta gör att beteendet bibehålls konsekvent när filen öppnas från indexet eller ett träd istället för från filsystemet.

EXEMPEL

  • Mönstret hello.* matchar alla filer eller kataloger vars namn börjar med hello.. Om man vill begränsa detta till endast katalogen och inte i dess underkataloger kan man lägga till ett snedstreck före mönstret, t.ex. /hello.*; mönstret matchar nu hello.txt, hello.c men inte a/hello.java.

  • Mönstret foo/ matchar en katalog foo och sökvägar under den, men matchar inte en vanlig fil eller en symbolisk länk foo (detta överensstämmer med hur sökvägsspec fungerar generellt i Git)

  • Mönstret doc/frotz och /doc/frotz har samma effekt i alla .gitignore-filer. Med andra ord är ett inledande snedstreck inte relevant om det redan finns ett mittenstreck i mönstret.

  • Mönstret foo/* matchar foo/test.json (en vanlig fil), foo/bar (en katalog), men det matchar inte foo/bar/hello.c (en vanlig fil), eftersom asterisken i mönstret inte matchar bar/hello.c som har ett snedstreck.

    $ git status
    [...]
    # Ospårade filer:
    [...]
    #       Dokumentation/foo.html
    #       Dokumentation/gitignore.html
    #       fil.o
    #       lib.a
    #       src/internal.o
    [...]
    $ cat .git/info/exclude
    # ignorera objekt och arkiv, var som helst i trädet.
    *.[oa]
    $ cat Dokumentation/.gitignore
    # ignorera genererade html-filer,
    *.html
    # förutom foo.html som underhålls manuellt
    !foo.html
    $ git status
    [...]
    # Ospårade filer:
    [...]
    #       Dokumentation/foo.html
    [...]

Ett annat exempel:

    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore

Den andra .gitignore-filen förhindrar att Git ignorerar arch/foo/kernel/vmlinux.lds.S.

Exempel för att exkludera allt utom en specifik katalog foo/bar (observera /* - utan snedstrecket skulle jokertecknet även exkludera allt inom foo/bar):

    $ cat .gitignore
    # exkludera allt utom katalogen foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar

GIT

En del av git[1]-sviten