Vezérlőpult
9. .gitignore és ami kimarad · Helyi munka: az első commitok

2. témakör · Helyi munka: az első commitok · 9. fejezet

.gitignore és ami kimarad

Nem minden fájl való a repóba. A letöltött csomagok, a fordítás kimenete, a naplófájlok és főleg a jelszavak kimaradnak. Ebben a fejezetben megtanulod, hogyan mondod meg a Gitnek a .gitignore fájllal, mit hagyjon figyelmen kívül, és mit tegyél, ha valami már bekerült.

CLI + DesktopMinta-tesztelőBesorolóSzimulátor15 kvízkérdés

Tanulási célok

1Mi nem való a repóba?

Az alapelv: a repóba az kerül, amit ember ír (forráskód, képek, dokumentáció, beállítások), és amiből a projekt bármelyik gépen újra előállítható. Ami ebből gépi úton keletkezik, ami csak a te gépedre tartozik, vagy ami titok, az kimarad.

Mi?PéldákMiért marad ki?
Függőségeknode_modules/, vendor/, packages/ Hatalmas (akár több száz MB), és a package.json alapján az npm install bárhol újra letölti.
Build-kimenetbin/, obj/ (C#), dist/, build/, *.exe A forráskódból fordítással keletkezik, minden fordításkor változik, és ütközéseket okoz.
Titkok.env, jelszavak, API-kulcsok, tanúsítványok Aki látja a repót, látja a jelszót is. Egy nyilvános repóból automata programok percek alatt kigyűjtik.
Naplók, ideiglenes fájlok*.log, *.tmp, *.cache Futás közben keletkeznek, és semmi közük a forráshoz.
Szerkesztő és rendszer fájljai.vs/, .idea/, Thumbs.db, .DS_Store, desktop.ini A te gépedhez és programodhoz tartoznak, a csapattársaidnak zavaróak.
ℹ️ A LOCK FÁJL BELEKERÜL!

A package-lock.json (C#-ban a packages.lock.json) gépi úton készül, mégis a repóba való: ez rögzíti a csomagok pontos verzióját, így mindenki ugyanazt telepíti.

Repóba való, vagy kimarad?

Egy webes és egy C#-os projekt fájljai. Döntsd el mindegyikről!

1 / 12Pontszám: 0
…

2A .gitignore fájl

A .gitignore egy egyszerű szövegfájl, általában a repó gyökerében. Minden sora egy minta: az ennek megfelelő, még nem követett fájlokat a Git nem mutatja a git status-ban, és a git add . sem veszi fel őket. A .gitignore-t magát commitolni kell, hogy a csapat minden tagjánál ugyanúgy működjön.

# Függőségek
node_modules/

# Build-kimenet
dist/

# Naplók
*.log

# Titkok, de a minta maradhat
.env
!.env.example

# Rendszerfájlok
Thumbs.db

Létrehozás parancssorból (PowerShell):

PS> "node_modules/" | Set-Content .gitignore
PS> Add-Content .gitignore "*.log"
PS> code .gitignore        # vagy a VS Code-ban

Utána commitold a többi fájllal együtt:

PS> git add .gitignore
PS> git commit -m "chore: .gitignore"
⚠️ KÉT WINDOWS-OS CSAPDA

1. A fájlnév. A neve pontosan .gitignore: ponttal kezdődik, és nincs kiterjesztése. A Jegyzettömb szívesen ment .gitignore.txt-t (a Fájlkezelő ezt el is rejti, ha ki van kapcsolva a kiterjesztések mutatása). Ezt a Git nem olvassa. Készítsd a VS Code-ban vagy parancssorból!

2. A kódolás. A Windows PowerShell 5.1 > és >> jele UTF-16 kódolású fájlt ír, ezt a Git nem érti, a minták hatástalanok lesznek. Használd a Set-Content / Add-Content parancsot vagy a VS Code-ot. (A szimulátor ezt is jelzi.)

3A minták szabályai

MintaMire illeszkedik?Példa, amit kizár
debug.logilyen nevű fájl vagy mappa bármelyik mappábandebug.log, src/debug.log
*.log* = bármennyi karakter (a / kivételével)app.log, logs/hiba.log
kep?.png? = pontosan egy karakterkep1.png, de nem kep10.png
*.[oa][…] = a felsorolt karakterek egyikemain.o, lib.a
build/a / a végén: csak mappa, bármelyik szinten, a teljes tartalmávalbuild/, app/build/, de egy build nevű fájlt nem
/config.jsona / az elején: csak a .gitignore mappájábanconfig.json, de nem src/config.json
doc/*.pdfha középen van /, az útvonal a .gitignore helyétől számítdoc/a.pdf, de nem doc/2026/a.pdf
doc/**/*.pdf** = bármennyi mappaszint (akár nulla)doc/a.pdf, doc/2026/09/a.pdf
!fontos.log! = kivétel: egy korábbi minta hatását visszavonja(a fontos.log mégis bekerül)
# megjegyzésa #-tel kezdődő és az üres sorokat a Git kihagyja—

4Minta-tesztelő

Írd a mintákat a bal oldali mezőbe! Jobb oldalt azonnal látszik, melyik fájl marad ki, és melyik sor zárta ki (ugyanezt mutatja a valódi git check-ignore -v). Oldd meg a feladványokat, vagy kísérletezz szabadon!

Mi marad ki?

A projekt fájljai

    5Kész sablonok

    Nem kell fejből tudni, mit hagy maga után egy Node.js-, C#- vagy Python-projekt. Mindegyikhez van bevált sablon:

    Node.js / webes projekt (részlet)

    node_modules/
    dist/
    build/
    .env
    .env.*.local
    npm-debug.log*
    *.log
    .vscode/*
    !.vscode/extensions.json

    C# / Visual Studio (részlet)

    [Bb]in/
    [Oo]bj/
    .vs/
    *.user
    *.suo
    [Dd]ebug/
    [Rr]elease/
    packages/
    TestResults/

    A [Bb]in/ a bin/ és a Bin/ mappára is illeszkedik. A .vscode/* + !.vscode/extensions.json pár a mappa tartalmát kizárja, egyetlen közös fájlt viszont megtart. A sablon csak kiindulópont, nyugodtan bővítsd a projekted saját fájljaival.

    6Ha a fájl már bekerült

    A leggyakoribb meglepetés: beírod a .gitignore-ba a *.log-ot, de a debug.log továbbra is ott van a git status-ban. Az ok: ezt a fájlt korábban már commitoltad, a Git tehát követi, a .gitignore pedig csak a követetlen fájlokra hat.

    1. A fájl követettValaki korábban commitolta a debug.log-ot.
    2. Minta a .gitignore-ba*.log, de a status továbbra is modified-ot ír.
    3. Kivétel a követésbőlgit rm --cached debug.log: kikerül az indexből, a lemezen megmarad.
    4. Commitgit commit -m "chore: debug.log kivétele a repóból". Innentől ignorált.
    PS> git rm --cached debug.log
    rm 'debug.log'
    PS> git rm -r --cached node_modules      # egy egész mappa: -r
    PS> git commit -m "chore: generált fájlok kivétele a repóból"
    ⛔ A --CACHED NÉLKÜL TÖRÖL!

    A git rm debug.log (--cached nélkül) a fájlt a lemezről is törli. Ha csak a követésből akarod kivenni, a --cached kötelező.

    ℹ️ A TÖRTÉNETBEN MEGMARAD

    A git rm --cached után a fájl a következő commitokból hiányzik, de a régiekben benne marad, és a git show-val előhozható. Egy óriási mappánál ez csak helyet foglal, egy jelszónál viszont komoly baj (7. szakasz). A csapattársaknál a következő git pull (18. fejezet) törli a fájlt a munkakönyvtárból, ezért szólj nekik előre.

    7Titkok: .env és társai

    A jelszavakat, API-kulcsokat, adatbázis-elérést soha nem írjuk a forráskódba és nem commitoljuk. A bevált módszer: a titkok egy .env fájlba kerülnek, amely ignorált, mellé pedig egy .env.example kerül a repóba, a kulcsok nevével, értékek nélkül. Így a csapattárs tudja, mit kell kitöltenie.

    .env — kimarad (ignorált)

    DB_HOST=localhost
    DB_JELSZO=Titok123!
    API_KULCS=sk_live_51Hx…

    .env.example — a repóba kerül

    DB_HOST=localhost
    DB_JELSZO=
    API_KULCS=

    C#-ban ugyanerre való a User Secrets (dotnet user-secrets set "Db:Jelszo" "…"), amely a projekten kívül, a felhasználói profilodban tárolja a titkokat.

    ⛔ HA MÉGIS FELTÖLTÖTTÉL EGY TITKOT

    1. Azonnal tedd érvénytelenné (kérj új kulcsot, változtasd meg a jelszót). Ez a legfontosabb lépés. A feltöltött titkot kompromittáltnak kell tekinteni: egy nyilvános repóban automaták percek alatt megtalálják.

    2. Utána vedd ki a követésből (git rm --cached .env), tedd a .gitignore-ba, és commitold. Ez önmagában nem elég, mert a régi commitokban a titok továbbra is olvasható. A történetből eltávolítani csak speciális eszközökkel lehet, és ez minden csapattagot érint. Ezért az érvénytelenítés az igazi megoldás.

    A GitHub push protection és secret scanning funkciója sok ismert kulcsformátumot felismer, és már a feltöltéskor figyelmeztet vagy megállít. Erre azért ne építs!

    8Más kizárási helyek és az üres mappa

    Hol?Kire vonatkozik?Mire jó?
    .gitignore a gyökérbenmindenkire (commitolva)a projekt közös szabályai: ez a fő hely
    .gitignore egy almappábanmindenkire, csak abban a mappában és alattapl. docs/.gitignore a dokumentáció saját ideiglenes fájljaira
    .git/info/excludecsak rád, ebben az egy repóbansaját jegyzetek, próbafájlok, amelyekről a csapatnak nem kell tudnia
    globális fájl (core.excludesFile)csak rád, minden repódbana saját gépedre jellemző szemét: Thumbs.db, desktop.ini, a szerkesztőd fájljai
    PS> "Thumbs.db" | Set-Content ~\.gitignore_global
    PS> git config --global core.excludesFile ~/.gitignore_global

    Az üres mappa

    A Git fájlokat követ, mappákat nem: egy üres mappa nem kerül a repóba. Ha mégis kell (pl. egy uploads/ mappa, amelybe futás közben kerülnek fájlok), tegyél bele egy üres .gitkeep fájlt. Ez nem Git-parancs, csak egy elterjedt szokás. Ha a mappa tartalmát ignorálnád, a fájl maradjon kivétel:

    uploads/*
    !uploads/.gitkeep

    9Ellenőrzés és hibakeresés

    ParancsMit tud?
    git status --ignoreda szokásos állapot mellett az ignorált fájlokat is listázza
    git check-ignore -v .envmegmondja, melyik fájl hányadik sora zárja ki: .gitignore:11:.env.gitignore:9:.env  .envnbsp;.gitignore:9:.env  .envnbsp;.env
    git ls-filesa követett fájlok listája: itt látszik, ha valami már bekerült
    git add -f fájlegy ignorált fájl felvétele „erővel”, kivételesen (utána követett lesz)

    Miért nem ignorálja?

    TünetValószínű okMegoldás
    a fájl modified-ként látszikmár követettgit rm --cached + commit
    semmilyen minta nem hata fájl neve .gitignore.txt, vagy rossz mappában vanátnevezés; ls -Force megmutatja a valódi nevet
    semmilyen minta nem hatUTF-16 kódolás (PowerShell >)újraírás Set-Content-tel vagy VS Code-ban (jobb alsó sarok: UTF-8)
    a !kivétel nem működika szülőmappa ki van zárva, vagy a kivétel a kizáró sor előtt állmappa/* + !mappa/fájl, a kivétel kerüljön a végére
    egy almappa fájlja nem marad kia minta /-rel kezdődik, így csak a gyökérre vonatkozika kezdő / elhagyása vagy **/

    10A Desktopban, a VS Code-ban és a GitHubon

    Desktop GitHub Desktop
    • A Changes listában jobb klikk egy fájlon: Ignore file (add to .gitignore), vagy Ignore all .log files. A Desktop beírja a mintát, és a .gitignore módosításként megjelenik a listában: commitold!
    • Repository → Repository settings → Ignored files: itt szerkesztőablakban írhatod a teljes .gitignore-t.
    • Új repónál (File → New repository) a Git ignore listából sablont választhatsz.
    • Egy már követett fájlhoz nincs „rm --cached” gomb: nyiss parancssort (Repository → Open in …).
    IDE VS Code
    • A Source Control panelen jobb klikk egy fájlon: Add to .gitignore.
    • Az Explorerben az ignorált fájlok és mappák halványabbak, így ránézésre látszik, mi marad ki.
    • A jobb alsó sarokban látszik a fájl kódolása: a .gitignore legyen UTF-8.
    Web GitHub.com
    • Új repónál: Add .gitignore → sablon választása.
    • Meglévő repóban: Add file → Create new file, és ha a név .gitignore, megjelenik a Choose .gitignore template választó.
    • A .env és a hasonló titkok feltöltésére a push protection figyelmeztethet.

    11Gyakorlás a szimulátorban

    A hazi-app Node.js-projektben rendetlenség van: letöltött csomagok, fordított fájl, jelszavas .env, és egy korábban véletlenül commitolt naplófájl. Rakj rendet! A .gitignore-t így írhatod: "node_modules/" | Set-Content .gitignore, majd soronként bővítheted: Add-Content .gitignore "dist/". A cat .gitignore megmutatja a tartalmát.

    PowerShell + Git

    Windows PowerShell
    Küldetések 0 / 8
      A projekt fájljai most

        12Feladatok

        Gyakorló feladatok

        ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

        9.1⭐CLI

        A saját repódban készíts .gitignore-t, amely kizárja a *.log fájlokat és a temp/ mappát! Hozz létre egy proba.log-ot és egy temp/a.txt-t, majd hasonlítsd össze a git status és a git status --ignored kimenetét.

        9.2⭐Web

        Nyisd meg a github/gitignore repóban a Node.gitignore és a VisualStudio.gitignore fájlt! Keress bennük három olyan mintát, amelyet a fejezet táblázata alapján el tudsz magyarázni, és egyet, amelyiket nem.

        9.3⭐

        Oldd meg a Minta-tesztelő mind az öt feladványát úgy, hogy egyiknél sem nézed meg a megoldást!

        9.4⭐⭐CLI

        Commitolj egy jegyzet.log fájlt, utána írd a *.log-ot a .gitignore-ba, és módosítsd a fájlt. Mit mutat a status? Vedd ki a követésből úgy, hogy a lemezen megmaradjon, és ellenőrizd a git ls-files és a git check-ignore -v jegyzet.log paranccsal.

        9.5⭐⭐Desktop

        A GitHub Desktopban hozz létre egy debug.log fájlt, és a Changes listában jobb klikkel add a .gitignore-hoz („Ignore all .log files”)! Nézd meg a Repository settings → Ignored files fület, és commitold a változást.

        9.6⭐⭐CLI

        Egy C#-os konzolprojektben (dotnet new console) futtasd a dotnet new gitignore-t, majd a dotnet build-et! Ellenőrizd, hogy a bin/ és az obj/ nem jelenik meg a statusban.

        9.7⭐⭐⭐CLI

        Készíts egy kis Node.js-projektet, amely egy .env-ből olvas be egy „titkot”! A repóban legyen .env.example és README-leírás arról, hogyan kell kitölteni. Egy társad klónozza, és próbálja elindítani csak a README alapján.

        13Önellenőrző kvíz

        Ellenőrizd magad!

        Az egyválasztós kérdéseknél kattints a válaszra. A többválasztósaknál jelöld be az összes helyeset, majd nyomd meg az Ellenőrzés gombot.

        14Fogalomtár

        FogalomJelentés
        .gitignoreszövegfájl a mintákkal, amelyekre illeszkedő, még nem követett fájlokat a Git figyelmen kívül hagy
        minta (pattern)a .gitignore egy sora: *.log, build/, /config.json …
        ignorált fájla mintára illeszkedő fájl: nem látszik a statusban, és az add . kihagyja
        kivétel (!)egy korábbi minta hatásának visszavonása egy fájlra
        függőségletöltött külső csomag (node_modules/); a leírója (package.json) kerül a repóba
        build-kimenetfordítással keletkező fájlok (bin/, obj/, dist/)
        .env / .env.exampletitkok helyi fájlja (ignorált) / a kitöltendő kulcsok mintája (a repóban)
        git rm --cachedfájl kivétele a követésből úgy, hogy a lemezen megmarad
        git check-ignore -vmegmutatja, melyik minta zár ki egy fájlt
        .git/info/excludecsak helyben érvényes kizárási lista (nem kerül a repóba)
        core.excludesFileglobális, minden repódra érvényes kizárási fájl beállítása
        .gitkeepüres „helyőrző” fájl, hogy egy üres mappa is bekerüljön a repóba

        15Összegzés

        1. A repóba a forrás kerül. A függőségek, a build-kimenet, a naplók, a rendszerfájlok és a titkok kimaradnak.
        2. A .gitignore a gyökérben van, soronként egy minta, és commitolni kell. Sablonból érdemes indulni.
        3. Minták: *, ?, mappa/ (csak mappa), /gyoker (csak a gyökérben), ** (bármennyi szint), !kivétel. Az utolsó illeszkedő minta dönt.
        4. A .gitignore csak a követetlen fájlokra hat. Ami már bekerült: git rm --cached + commit.
        5. Feltöltött titok: először érvényteleníteni, mert a történetben megmarad. Ellenőrzés: git status --ignored, git check-ignore -v.

        A következő fejezetben megtanuljuk visszavonni a változásokat: restore, reset, revert és --amend.