Vezérlőpult
1. A verziókezelés és a Git története · Alapok és munkakörnyezet

1. témakör · Alapok és munkakörnyezet · 1. fejezet

A verziókezelés és a Git története

Mielőtt kiadnánk az első git parancsot, tisztázzuk, milyen problémát old meg a verziókezelés, milyen típusai vannak, hogyan született meg a Git — és mi a különbség a Git és a GitHub között.

ElméletIdőgép-demó2 besoroló játék14 kvízkérdés7 feladat

Tanulási célok

1Miért kell verziókezelés?

Biztosan láttál már ilyen mappát — talán a sajátodat. Egy iskolai weboldal-projekt néhány hét után valahogy így néz ki, ha kézzel próbáljuk menteni a változatokat:

📁 iskolai_weboldal
  • 📁weboldal03.02.
  • 📁weboldal_uj03.05.
  • 📁weboldal_uj_MUKODIK03.06.
  • 📁weboldal_uj_MUKODIK_masolat03.06.
  • 🗜️weboldal_VEGLEGES.zip03.09.
  • 🗜️weboldal_VEGLEGES_Peti_javitasai.zip03.10.
  • 🗜️weboldal_VEGLEGES_tenyleg_utolso(2).zip03.10.
Melyik a legújabb? Mi változott? Ki javította el a menüt?

Ugyanez a projekt verziókezeléssel:

$ git log --oneline
e41b7c2 (HEAD -> main) Kapcsolat űrlap ellenőrzése
9a0d3f1 Mobilnézet javítása
5c27e8a Galéria oldal hozzáadása
b81f0d4 Menü és lábléc elkészítése
2f6a9c3 Első változat: kezdőlap

Egyetlen mappa, benne mindig a legfrissebb állapot — a korábbi változatok pedig bármikor visszanézhetők, összehasonlíthatók és visszaállíthatók. (A parancsot a 8. fejezetben tanuljuk meg; most csak az eredményt nézzük.)

Milyen gondokat old meg?

Kérdés / problémaKézi mentésekkelVerziókezelővel
Melyik a legfrissebb változat?Találgatás a fájlnevek és dátumok alapjánMindig a munkamappa az aktuális állapot
Mi változott két változat között?Két mappát kézzel kell összevetniSoronként megmutatja a különbséget
Ki és mikor változtatott, és miért?Nem derül kiMinden változáshoz szerző, időpont és üzenet tartozik
Elrontottam — vissza tudok lépni?Csak ha véletlenül volt mentésBármelyik korábbi állapot visszaállítható
Ketten dolgozunk ugyanazonFelülírjuk egymás munkáját, e-mailben küldözgetjük a fájlokatA változások összefésülhetők, az ütközéseket jelzi
Ki szeretnék próbálni egy ötletetÚjabb másolat a mappárólKülön ágon (branch) kísérletezhetek
💡 NEM CSAK KÓDHOZ

A verziókezelés bármilyen szöveges fájlnál remekül működik: forráskód, weboldal, konfigurációs fájl, dokumentáció, de akár egy regény kézirata is. Képeknél és más bináris fájloknál is menti a változatokat, de soronkénti különbséget nem tud mutatni.

2Mi az a verziókezelő rendszer?

A verziókezelő rendszer (angolul Version Control System, röviden VCS; magyarul verziókövetőnek is hívják) olyan szoftver, amely nyilvántartja egy projekt fájljainak változásait az idő során, így bármikor visszanézhető vagy visszaállítható egy korábbi állapot.

A projekt teljes nyilvántartását a tároló, angolul repository (röviden repo) tartalmazza. Ha elértünk egy értelmes állapotot, azt egy commit („rögzítés”) segítségével elmentjük. Egy commit ezeket tartalmazza:

azonosító (hash)9a0d3f1c4be8…
szerzőTóth Péter <toth.peter@pelda.hu>
időpont2026. 03. 09. 11:03
üzenetMobilnézet javítása
szülő commit5c27e8a…
pillanatképa projekt összes fájljának állapota ebben a pillanatban

Pillanatképek, nem csak különbségek

Sok régebbi rendszer csak a fájlok különbségeit tárolta. A Git ezzel szemben minden commitnál a teljes projekt pillanatképét (snapshot) rögzíti. Ez nem pazarló: ha egy fájl nem változott, nem tárolja újra, csak hivatkozik a korábbi, azonos tartalomra.

1. commit 2. commit 3. commit index.html v1 style.css v1 app.js v1 index.html v2 style.css ↩ v1 app.js ↩ v1 index.html ↩ v2 style.css v2 app.js ↩ v1 új tartalom eltárolva változatlan → hivatkozás a korábbira
Minden commit a teljes projektet „lefényképezi”, de csak a megváltozott fájlok új tartalmát tárolja el — a többinél a korábbi, azonos változatra hivatkozik.

Időgép: böngészd egy fájl történetét!

Egy webshop kosar.js fájljának öt commitja. Kattints a commitokra! Zölddel az előző változathoz képest hozzáadott, pirossal a törölt sorok látszanak. Ki és mikor rontotta el a kedvezmény számítását?

    
            

    3A verziókezelők típusai

    Aszerint, hogy hol tárolódik a projekt története, három nagy csoportot különböztetünk meg.

    Helyi verziókezelők

    A legelső rendszerek (pl. SCCS, RCS) csak a saját gépen, fájlonként tartották nyilván a változásokat. Egyedül dolgozva hasznosak, de a csapatmunkát nem támogatják, és ha a gép tönkremegy, minden elvész.

    Központosított verziókezelők (CVCS)

    A teljes történet egyetlen központi szerveren van. A fejlesztők onnan kérik le a fájlok aktuális változatát (munkapéldány), és oda küldik vissza a változtatásaikat. Ilyen a CVS, a Subversion (SVN) és a Perforce.

    Elosztott verziókezelők (DVCS)

    Minden fejlesztő gépén megvan a teljes tároló, a teljes történettel együtt — nem csak az aktuális fájlok. Ilyen a Git, a Mercurial és a Bazaar. A gyakorlatban a csapatok itt is kijelölnek egy közös tárolót (például a GitHubon), amelyen keresztül szinkronizálják a változásokat — de ez csak egy a sok teljes értékű másolat közül.

    Központi szerver teljes történet Fejlesztő A Fejlesztő B Fejlesztő C munkapéldánymunkapéldánymunkapéldány
    Központosított: a történet csak a szerveren van — minden rögzítéshez el kell érni.
    Közös tároló (pl. GitHub) teljes történet Fejlesztő A Fejlesztő B Fejlesztő C teljes történetteljes történetteljes történet
    Elosztott: minden gépen teljes másolat van — a közös tároló csak a szinkronizálás helye.

    Az elosztott modell előnyei

    ⚠️ GYAKORI TÉVHIT

    Az elosztott rendszer nem jelenti azt, hogy minden módosítás azonnal, magától megjelenik a többieknél az interneten. A szinkronizálást mindig mi kezdeményezzük (feltöltés és letöltés — ezek a 18. fejezet témái). Az sem igaz, hogy kevesebb tárhelyet igényel: mivel mindenkinél ott a teljes történet, inkább több helyet foglal.

    Központosított és elosztott verziókezelés összehasonlítása
    Központosított (CVCS)Elosztott (DVCS)
    Hol a teljes történet?Csak a központi szerverenMinden fejlesztő gépén + a közös tárolón
    A fejlesztő gépénMunkapéldány (aktuális fájlok)Teljes tároló (repository)
    Commit hálózat nélkül✗✓
    Ha a szerver tönkremegyA történet elveszhetBármelyik másolatból helyreállítható
    PéldákCVS, Subversion (SVN), PerforceGit, Mercurial, Bazaar

    Központosított vagy elosztott?

    Döntsd el mindegyik állításról, melyik modellre igaz!

    1 / 10Pontszám: 0
    …

    4A Git története

    A Git egy nagyon konkrét vészhelyzetből született — a világ egyik legnagyobb nyílt forráskódú projektje, a Linux-kernel fejlesztése közben.

    A Linux-kernelt 2002-től a BitKeeper nevű elosztott verziókezelővel fejlesztették. A BitKeeper fizetős, zárt forráskódú termék volt, de a kernel fejlesztői ingyenesen használhatták. 2005 áprilisában ezt az ingyenes licencet — a fejlesztőcég és a közösség közti vita után — visszavonták. A Linux megalkotója, Linus Torvalds nem talált olyan szabad rendszert, amely elég gyors és elég jól kezelte volna a több ezer fejlesztő munkáját, ezért megírta a sajátját.

    A munka 2005. április elején kezdődött, és néhány nap múlva a Git már saját magát verziókezelte. Két hónappal később már a kernel egy teljes kiadását kezelték vele. Torvalds a tervezésnél ezeket a célokat tűzte ki:

    2005 júliusában Torvalds átadta a projekt karbantartását Junio Hamanónak, aki azóta is a Git vezető fejlesztője.

    ℹ️ HONNAN A NÉV?

    A git a brit szlengben nagyjából „csökönyös, kellemetlen, modortalan alak” jelentésű szó. Torvalds önironikusan magáról nevezte el: azzal viccelődött, hogy minden projektjét saját magáról nevezi el — előbb a Linuxot, aztán a gitet. A Git saját leírása „the stupid content tracker”-nek (a buta tartalomkövetőnek) nevezi magát, a rajongók pedig utólag kitalálták rá a Global Information Tracker „rövidítést” is.

    Idővonal

    1. 1972
      SCCS — az első ismert verziókezelő a Bell Labs-nél (helyi).
    2. 1982
      RCS — fájlonkénti, helyi verziókezelés.
    3. 1990
      CVS — központi szerver, több fejlesztő egyszerre. Évtizedekig meghatározó.
    4. 2000
      Subversion (SVN) — a CVS modern utódja, a legnépszerűbb központosított rendszer.
    5. 2002
      A Linux-kernel fejlesztői áttérnek a BitKeeper elosztott rendszerre.
    6. 2005
      A BitKeeper ingyenes licencét visszavonják → Linus Torvalds megírja a Gitet. Ugyanebben a hónapban, ugyanezért indul a Mercurial is.
    7. 2008
      Elindul a GitHub, amely a Git-tárolók megosztását és a közös munkát egy weboldalon teszi kényelmessé.
    8. 2018
      A Microsoft 7,5 milliárd dollárért megvásárolja a GitHubot.
    9. 2020
      A GitHubon az új tárolók alapértelmezett ága master helyett main lesz; a Gitben (2.28-tól) ez beállíthatóvá válik.
    10. ma
      A Git a legelterjedtebb verziókezelő: a fejlesztők túlnyomó többsége ezt használja, a kis iskolai projektektől a Windows forráskódjáig.

    5Git és GitHub

    A két nevet sokan összekeverik, pedig két különböző dologról van szó:

    Git
    verziókezelő program
    • a saját gépeden fut, internet nélkül is,
    • ingyenes, nyílt forráskódú,
    • parancssorból (git …) vagy grafikus programokból használjuk,
    • ő készíti a commitokat, az ágakat, az összefésülést.
    GitHub
    webes szolgáltatás Git-tárolókhoz
    • a felhőben tárolja a repóidat (távoli tároló),
    • a repó lehet nyilvános (public) vagy privát (private),
    • csapatmunka-eszközök: pull request, kódáttekintés, fork, Issues, Projects,
    • extrák: GitHub Pages (weboldal), GitHub Actions (automatizálás).
    💡 HASONLAT

    A Git és a GitHub viszonya olyan, mint a fényképezőgép és egy online fotóalbum. A fényképezőgéppel (Git) bárhol, internet nélkül is készíthetsz képeket (commitokat). Az albumba (GitHub) feltöltve biztonságban vannak, megmutathatod őket másoknak, és közösen is dolgozhattok velük. Fényképezni album nélkül is lehet — de album nélkül nehéz megosztani a képeket.

    A GitHub a legnépszerűbb, de nem az egyetlen ilyen szolgáltatás. Hasonló, Git-tárolókat kezelő platformok: GitLabBitbucketAzure DevOps ReposGitea — amit ebben a tananyagban a GitHubról tanulsz, az nagyrészt ezekre is igaz.

    ⚠️ NE KEVERD ÖSSZE

    A Subversion és a Mercurial nem GitHub-szerű szolgáltatás, hanem másik verziókezelő program — a Git „vetélytársai”.

    Git vagy GitHub?

    Melyikre jellemző az állítás: a programra vagy a webes szolgáltatásra?

    1 / 10Pontszám: 0
    …

    6Alapfogalmak első ránézésre

    A következő fejezetekben ezekkel a szavakkal fogunk dolgozni. Most elég, ha nagyjából tudod, melyik mit jelent — mindegyiket részletesen, kipróbálva is megtanuljuk.

    FogalomRövidenRészletesen
    repository (repo)A projekt tárolója a teljes történettel. Lehet helyi (local, a gépeden) vagy távoli (remote, pl. a GitHubon).5. és 17. fejezet
    .git mappaA projekt mappájában lévő rejtett mappa — itt tárolja a Git a teljes verziótörténetet.5. fejezet
    commitEgy rögzített állapot (pillanatkép) a projekt történetében, üzenettel.6–7. fejezet
    hashA commit egyedi azonosítója (SHA-1), pl. 9a0d3f1.8. fejezet
    branch (ág)Párhuzamos fejlesztési vonal — egy ötlet kipróbálható anélkül, hogy a fő vonalat elrontanánk.11. fejezet
    main / masterAz alapértelmezett, fő ág neve (régen master, ma általában main).11. fejezet
    mergeKét ág összefésülése, mindkét ág történetének megtartásával.12. fejezet
    cloneEgy távoli tároló teljes lemásolása a saját gépre.17. fejezet
    push / pullpush: a helyi commitok feltöltése a távoli tárolóba · pull: a távoli változások letöltése a helyibe.18. fejezet
    forkMás projektjének másolata a saját GitHub-fiókodban — így hozzájárulhatsz a fejlesztéséhez.22. fejezet
    pull request (PR)Kérés a tároló gazdájának: „nézd át és olvaszd be a módosításaimat”.20. fejezet
    ℹ️ IRÁNYOK

    Jegyezd meg már most: a push felfelé visz (a gépedről a távoli tárolóba), a pull lefelé hoz (a távoliból a gépedre). A clone egyszeri, legelső letöltés, amikor még nincs helyi másolatod.

    7Eszközeink a tananyagban

    A Gitet többféle felületről is használhatjuk — mögöttük mindig ugyanaz a Git dolgozik. A tananyagban minden fontos műveletet kétféleképpen is megnézünk: parancssorból és grafikus felületről. A fejezetek címkéi mutatják, melyik felületet használjuk.

    CímkeEszközMire jó?
    CLIParancssor: PowerShell, Git Bash, a VS Code termináljaMinden Git-funkció elérhető, pontosan látszik, mi történik. A hibaüzenetek és a súgó is itt a legbeszédesebbek.
    DesktopGitHub Desktop, valamint a VS Code és a Visual Studio beépített Git-paneljeKattintással commitolhatsz, ágat válthatsz, és jól áttekinthetők a változások.
    Webgithub.com a böngészőbenTávoli tárolók, pull requestek, Issues, beállítások, közös munka.
    💡 MIÉRT MINDKETTŐ?

    A grafikus felület kényelmes, de csak a leggyakoribb műveleteket tudja. A parancssor mindenhol ugyanúgy működik: más gépen, szerveren, bármilyen fejlesztőkörnyezetben. Aki érti, mit csinál a parancs, az a grafikus gombok mögé is belát.

    8Feladatok

    Gyakorló feladatok

    ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — füzetben vagy szövegszerkesztőben dolgozz, a megoldásokat az órán beszéljük meg.

    1.1⭐

    Sorolj fel három problémát, amely verziókezelés nélkül előfordulhat, ha hárman dolgoztok ugyanazon a weboldalon!

    1.2⭐

    Egészítsd ki: A Gitet ____________ készítette ______-ben, a ____________ fejlesztéséhez, miután a korábban használt ____________ ingyenes licencét visszavonták.

    1.3⭐

    Magyarázd el két-három mondatban egy osztálytársadnak, mi a különbség a Git és a GitHub között! Találj ki hozzá egy saját hasonlatot (ne a fényképezőgépeset)!

    1.4⭐⭐

    Rajzold le a központosított és az elosztott modellt három fejlesztővel! Jelöld, hol van meg a teljes történet, és hol csak a munkapéldány!

    1.5⭐⭐

    Egy cég szervere leég, és nincs róla biztonsági mentés. Mi történik a projekt történetével, ha a cég Subversiont használt, és mi, ha Gitet? Indokold!

    1.6⭐⭐Web

    Nyisd meg a böngészőben a github.com/git/git oldalt (a Git saját forráskódjának tükre)! Keresd meg: hány commit van benne, és mikor volt a legutóbbi? Görgesd le a commitlistát a legelejéig — mi a legelső commit üzenete?

    1.7⭐⭐⭐

    Egy háromnapos iskolai projektben elkészítitek az osztály bemutatkozó weboldalát (kezdőlap, galéria, kapcsolat). Írj öt olyan commitüzenetet időrendben, amelyekből a haladás pontosan követhető! Mitől jó egy commitüzenet? (A 7. fejezetben visszatérünk rá.)

    9Ö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. A végén pontszámot kapsz.

    10Fogalomtár

    FogalomJelentés
    verziókezelő rendszer (VCS)szoftver, amely nyilvántartja a projekt fájljainak változásait, és lehetővé teszi a korábbi állapotok visszaállítását
    repository (tároló, repó)a projekt fájljai a teljes változástörténettel együtt
    commita projekt egy rögzített állapota: pillanatkép + szerző + időpont + üzenet + hash
    pillanatkép (snapshot)a projekt összes fájljának állapota egy adott pillanatban; a változatlan fájlokra a Git csak hivatkozik
    hash (SHA-1)a commit tartalmából számolt, 40 hexadecimális jegyű egyedi azonosító; röviden az első 7 jegye
    történet (history)a commitok időrendi láncolata
    munkapéldánya fájlok aktuális változata a fejlesztő gépén (központosított rendszereknél csak ez van helyben)
    központosított VCS (CVCS)a teljes történet egyetlen szerveren van; pl. CVS, Subversion
    elosztott VCS (DVCS)minden fejlesztőnél teljes tároló van, a közös tárolón keresztül szinkronizálnak; pl. Git, Mercurial
    Gitingyenes, nyílt forráskódú, elosztott verziókezelő program (Linus Torvalds, 2005)
    GitHubwebes szolgáltatás Git-tárolók tárolására és közös fejlesztésre (2008 óta, 2018 óta a Microsofté)
    helyi / távoli tárolólocal: a saját gépen lévő repó · remote: szerveren (pl. GitHubon) lévő repó
    nyilvános / privát tárolópublic: bárki megnézheti és klónozhatja · private: csak a meghívottak látják
    main / masteraz alapértelmezett fő ág neve (ma általában main)

    11Összegzés

    1. A verziókezelő nyilvántartja a projekt változásait: látod, mi, mikor, ki és miért változott, és bármikor visszaléphetsz.
    2. A commit a projekt pillanatképe szerzővel, időponttal, üzenettel — egyedi azonosítója a hash.
    3. Típusok: helyi → központosított (CVS, SVN) → elosztott (Git, Mercurial). Elosztottnál mindenkinél megvan a teljes történet, és hálózat nélkül is lehet commitolni.
    4. A Gitet Linus Torvalds írta 2005-ben a Linux-kernel fejlesztéséhez, miután a BitKeeper ingyenes licencét visszavonták.
    5. A Git program a gépeden; a GitHub webes szolgáltatás a távoli tárolóknak és a csapatmunkának (pull request, fork, Issues).

    A következő fejezetben feltelepítjük a Gitet és a GitHub Desktopot, és elvégezzük az első, kötelező beállításokat.