Vezérlőpult
5. Repository létrehozása · Helyi munka: az első commitok

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

Repository létrehozása

Egy közönséges mappából egyetlen paranccsal lesz Git-tároló: git init. Megnézzük, mi történik ilyenkor, mi van a rejtett .git mappában, hová érdemes repót létrehozni, és hogyan megy ugyanez a GitHub Desktopban.

CLI + Desktop.git-böngészőGit-szimulátor15 kvízkérdés7 feladat

Tanulási célok

1Mi a helyi repository?

A gépeden lévő repository (tároló, repó) valójában egy teljesen átlagos projektmappa, amelyben van egy rejtett .git mappa. Két részből áll:

📁 weboldal/ — a projekt mappája = a repository Munkakönyvtár working tree — ezeken dolgozol 📄 index.html 📄 style.css 📄 app.js 📁 kepek/ 📁 .git/ (rejtett) a tároló — ezt a Git kezeli • minden commit (a történet) • ágak és címkék • a repó beállításai (config) • az előkészítési terület commit pillanatkép be visszaállítás korábbi állapot ki
Egy repó = munkakönyvtár + .git mappa. A commit a munkakönyvtár állapotát menti a .git-be, onnan bármelyik korábbi állapot visszahozható.
⚠️ NEM A PROGRAM MAPPÁJÁBAN

A verziókövetési adatok nem a Git telepítési mappájában (C:\Program Files\Git), nem a felhasználói mappában és nem a GitHubon vannak, hanem minden projekt saját .git mappájában. Ahány repó, annyi .git mappa.

2Hogyan jön létre egy repó?

MódszerMikor használd?Hol tanuljuk?
CLI git initÚj vagy már meglévő projektmappából repót csinálsz a gépeden.ez a fejezet
Desktop File → New repositoryUgyanez grafikus felületen; rögtön egy első commitot is készít.ez a fejezet
Desktop VS Code: Initialize RepositoryA kódszerkesztőben megnyitott mappából.ez a fejezet
Web New repository a GitHubonA repó először a GitHubon születik (4. fejezet), onnan klónozod le.4. és 17. fejezet
CLI git cloneEgy már létező távoli repó teljes másolata a gépedre.17. fejezet

3git init lépésről lépésre

Hozzunk létre egy weboldal mappát a projektek mappában, és tegyük repóvá!

PS C:\Users\anna\projektek> mkdir weboldal
PS C:\Users\anna\projektek> cd weboldal
PS C:\Users\anna\projektek\weboldal> git status
fatal: not a git repository (or any of the parent directories): .git
PS C:\Users\anna\projektek\weboldal> git init
Initialized empty Git repository in C:/Users/anna/projektek/weboldal/.git/

A „not a git repository” hiba itt még teljesen rendben van: a mappa ekkor még nem repó. A git init után már az. A Git kiírta, hol hozta létre a .git mappát.

Mit mond az új repóról a git status?

PS C:\Users\anna\projektek\weboldal> git status
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Hozzunk létre egy fájlt, és nézzük meg újra:

PS C:\Users\anna\projektek\weboldal> ni index.html
PS C:\Users\anna\projektek\weboldal> git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	index.html

nothing added to commit but untracked files present (use "git add" to track)

Az index.html követetlen (untracked): a Git látja, hogy ott van, de még nem figyeli a változásait, és nem kerül bele a commitba. Ahhoz git add kell. Ez a következő fejezet témája.

Meglévő projekt repóvá tétele

Ha egy mappában már vannak fájlok, a git init nem változtat rajtuk, semmit nem töröl és nem ír felül. Csak létrehozza mellettük a .git mappát. A meglévő fájlok ezután mind untracked állapotban látszanak.

ℹ️ ÜRES MAPPÁK

A Git fájlokat követ, mappákat nem. Egy üres mappa (pl. egy még üres kepek) nem jelenik meg a git status-ban, és nem kerül be a commitba. Ha mégis kell egy üres mappa, szokás beletenni egy üres .gitkeep fájlt.

Hasznos változatok

ParancsMit csinál?
git initAz aktuális mappát teszi repóvá.
git init weboldalLétrehozza a weboldal mappát (ha még nincs), és azt teszi repóvá.
git init -b mainAz első ág neve main lesz, a beállítástól függetlenül.
git rev-parse --show-toplevelKiírja, melyik repó gyökerében (vagy almappájában) vagy.
💡 HA „MASTER”-RŐL SZÓL A GIT

Ha nem állítottad be az init.defaultBranch értékét, a git init hosszú hint: Using 'master' as the name for the initial branch… üzenetet ír, és az ág neve master lesz. Ez nem hiba. Pótold a beállítást (git config --global init.defaultBranch main), a már létrehozott repóban pedig nevezd át az ágat: git branch -m main.

⚠️ MÉG NINCS „MAIN” ÁG

Furcsa, de igaz: egy friss repóban a main ág még nem létezik. Az ágak a commitokra mutatnak, és még nincs commit. A HEAD már a main-re „vár”, és az ág az első committal jön létre.

4A .git mappa belseje

A .git mappa rejtett: a sima ls nem mutatja, csak az ls -Force (Git Bashben ls -a). Nézzünk bele! Kattints az elemekre:

.git-böngésző

    később — ezek egy friss repóban még nincsenek meg: az első git add, illetve az első commit után jelennek meg.

    ⛔ NE NYÚLJ HOZZÁ KÉZZEL

    A .git mappa tartalmát soha ne szerkeszd, ne mozgasd, és ne töröld kézzel. Ezt a Git kezeli, a parancsain keresztül. Ha a .git mappa megsérül vagy elveszik, vele együtt elveszik a teljes történet: minden korábbi változat. A munkakönyvtár fájljai ilyenkor megmaradnak, de a mappa már csak egy sima mappa.

    5Hová hozz létre repót?

    Az aranyszabály: egy projekt = egy mappa = egy repó. Tarts egy gyűjtőmappát a projektjeidnek (pl. C:\Users\anna\projektek), és abban minden projekt kapjon saját mappát és saját repót.

    ✓ Jó hely
    • C:\Users\anna\projektek\weboldal
    • D:\iskola\git\bemutatkozas
    • egy meglévő projekt mappája, amely még nem repó
    ✗ Kerüld
    • a teljes saját mappád (C:\Users\anna): minden dokumentumod, letöltésed a repó része lenne;
    • felhőszinkronizált mappa (OneDrive, Google Drive, Dropbox): a szinkron összeakadhat a Gittel, és megsérülhet a .git;
    • egy másik repó belseje: beágyazott repó lesz belőle, a külső repó nem követi rendesen a tartalmát;
    • rendszermappák (C:\Windows, C:\Program Files), a meghajtó gyökere.

    Ha nem vagy biztos benne, hogy egy mappa már egy repó része-e, kérdezd meg a Gitet. Ha repóban vagy, kiírja a repó gyökerét:

    PS C:\Users\anna\projektek\webshop\kepek> git rev-parse --show-toplevel
    C:/Users/anna/projektek/webshop

    Jó hely a repónak?

    Hozhatsz-e ide új repót?

    1 / 8Pontszám: 0
    …

    6Git-szimulátor

    Próbáld ki mindezt egy szimulált PowerShell-ablakban! A szimulátor ismeri a git init és a git status parancsot, és ugyanazt írja ki, mint a valódi Git. A küldetések végigvezetnek egy repó létrehozásán. A saját ötleteidet is nyugodtan kipróbálhatod, például mi történik, ha a webshop repó kepek mappájában adsz ki git init-et.

    PowerShell + Git

    Windows PowerShell
    Küldetések 0 / 10

      7Új repó a GitHub Desktopban

      File → New repository… (Ctrl + N). A megjelenő ablak:

      Create a new repository
      Name
      desktop-repo
      Description
      Első repóm a GitHub Desktopban
      Local path
      C:\Users\anna\Documents\GitHub
      Choose…
      Initialize this repository with a README
      Git ignore
      None ▾
      License
      None ▾

      ℹ The repository will be created at C:\Users\anna\Documents\GitHub\desktop-repo.

      Create repository
      Cancel
      💡 MEGLÉVŐ MAPPA HOZZÁADÁSA

      A parancssorból (git init-tel) létrehozott repót a File → Add local repository… menüvel veheted fel a GitHub Desktop listájára. Ha a kiválasztott mappa még nem repó, a program felajánlja: „create a repository here instead?”. Hasznos még a Repository → Show in Explorer (megnyitja a mappát) és az Open in Visual Studio Code is.

      8Új repó a VS Code-ban

      1. Nyisd meg a projekt mappáját: File → Open Folder…
      2. A bal oldali sávban kattints a Source Control ikonra (Ctrl + Shift + G).
      3. Kattints az Initialize Repository gombra. A VS Code ugyanazt a git init-et futtatja, mint te a parancssorban.

      A fájllistában ezután a követetlen fájlok mellett egy zöld U betű (Untracked) jelenik meg. A VS Code Git-támogatásáról a 25. fejezetben lesz szó részletesen.

      9Ha már nem kell a repó

      Ha egy mappát mégsem szeretnél repóként kezelni (pl. rossz helyen adtad ki a git init-et), elég törölni a .git mappát. A fájlok megmaradnak, a mappa újra közönséges mappa lesz:

      PS C:\Users\anna> Remove-Item .git -Recurse -Force
      PS C:\Users\anna> git status
      fatal: not a git repository (or any of the parent directories): .git

      A -Force kell, mert a .git rejtett. Rövidebben: rm -r -Force .git.

      ⛔ CSAK HA TUDOD, MIT CSINÁLSZ

      A .git törlésével a repó teljes története végleg elvész, ha nincs róla másolat (pl. a GitHubon). A rossz helyen létrehozott, üres repónál ez nem gond, egy valódi projektnél viszont igen. Ha csak a Desktop listájáról szeretnéd levenni a repót, használd a Repository → Remove… menüt: az a fájlokhoz nem nyúl.

      10Feladatok

      Gyakorló feladatok

      ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a saját gépeden dolgozz!

      5.1⭐CLI

      A projektek mappádban hozz létre egy elso-repo mappát, lépj bele, és add ki a git status parancsot! Utána git init, majd újra git status. Írd le, mi változott a kimenetben.

      5.2⭐CLI

      Listázd a rejtett elemeket is (ls -Force), majd a .git tartalmát (ls .git)! Írasd ki a .git\HEAD fájlt. Mit jelent a tartalma?

      5.3⭐Desktop

      A GitHub Desktopban hozz létre egy desktop-repo repót README-vel, a saját projektek mappádba! Nézd meg a History fület: van már commit? Mi az üzenete, és milyen fájlok vannak benne?

      5.4⭐⭐CLI

      Tedd repóvá a 3. fejezetben készített weboldal mappát! Mit mutat a git status? Megjelenik-e az üres kepek mappa? Miért? Tegyél bele egy .gitkeep fájlt, és nézd meg újra.

      5.5⭐⭐CLI

      Az egyik repódban állíts be egy helyi e-mail címet: git config user.email "…" (kapcsoló nélkül). Írasd ki a .git\config fájlt! Hol jelent meg a beállítás, és miért nem a .gitconfig-ban?

      5.6⭐⭐DesktopCLI

      Nyiss meg VS Code-ban egy még nem repó mappát, és a Source Control panelen kattints az Initialize Repository gombra! Ellenőrizd parancssorból is, hogy valóban repó lett (git status, ls -Force).

      5.7⭐⭐⭐CLI

      Kísérlet: hozz létre egy kulso repót, benne egy belso mappát, és abban is adj ki git init-et! Mit mutat a git status a kulso mappában? Mit ír a git rev-parse --show-toplevel a két mappában? Végül szüntesd meg a belső repót a .git törlésével. Miért kerüljük a beágyazott repókat?

      11Ö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.

      12Fogalomtár

      FogalomJelentés
      repository (repó, tároló)a projekt mappája a .git mappával: munkakönyvtár + teljes történet
      munkakönyvtár (working tree)a projekt fájljai, amelyeken dolgozol (a .git kivételével)
      .git mappaa projekt mappájában lévő rejtett mappa: itt tárolja a Git a verziókövetési adatokat
      git initúj, üres repót hoz létre (létrehozza a .git mappát)
      untracked (követetlen)a munkakönyvtárban lévő, de a Git által még nem követett fájl
      No commits yeta git status üzenete egy olyan repóban, amelyben még nincs commit
      HEADmutató arra, hogy éppen melyik ágon állsz (ref: refs/heads/main)
      objectsa .git adatbázisa: a fájltartalmak, mappák és commitok hash-sel elnevezve
      refs/headsaz ágak: mindegyik egy fájl az ág utolsó commitjának hash-ével
      .git/configa repó saját (--local) beállításai
      beágyazott repóegy másik repó mappáján belül létrehozott repó — kerülendő
      .gitkeepszokásos nevű üres fájl, hogy egy egyébként üres mappa is bekerüljön a repóba

      13Összegzés

      1. Repó = munkakönyvtár + a rejtett .git mappa. A teljes történet a projekt mappájában, a .git-ben van.
      2. git init: az aktuális mappát repóvá teszi. A meglévő fájlok megmaradnak, de untrackedok.
      3. Friss repóban a git status: On branch main · No commits yet. A main ág az első committal jön létre.
      4. A .git: HEAD, config, objects/, refs/… Kézzel nem nyúlunk hozzá. Ha törlöd, a történet elvész.
      5. Egy projekt = egy mappa = egy repó. Ne a saját mappád egésze, ne felhőszinkron, ne másik repó belseje.
      6. GitHub Desktop: File → New repository, rögtön Initial commit-tal · VS Code: Initialize Repository.

      A repó kész, de még üres a története. A következő fejezetben elkészítjük az első commitot, és megismerjük a Git három területét.