2. témakör · Helyi munka: az első commitok · 5. fejezet
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.
.git mappa.git init), GitHub Desktopból és VS Code-ból..git mappában tárolja, és mi van benne.git status kimenetét egy új repóban (No commits yet, Untracked files).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:
.git mappa: maga a tároló. Itt van a teljes történet (minden commit),
az ágak, a címkék és a repó beállításai. A Git ide menti a pillanatképeket, és innen tud visszaállítani..git mappa. A commit a munkakönyvtár állapotát menti a
.git-be, onnan bármelyik korábbi állapot visszahozható.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.
| Módszer | Mikor 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 repository | Ugyanez grafikus felületen; rögtön egy első commitot is készít. | ez a fejezet |
| Desktop VS Code: Initialize Repository | A kódszerkesztőben megnyitott mappából. | ez a fejezet |
| Web New repository a GitHubon | A repó először a GitHubon születik (4. fejezet), onnan klónozod le. | 4. és 17. fejezet |
CLI git clone | Egy már létező távoli repó teljes másolata a gépedre. | 17. fejezet |
git init lépésről lépésreHozzunk 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.
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)
main ágon vagy (a 2. fejezetben beállított init.defaultBranch szerint).git add-dal.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.
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.
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.
| Parancs | Mit csinál? |
|---|---|
git init | Az aktuális mappát teszi repóvá. |
git init weboldal | Létrehozza a weboldal mappát (ha még nincs), és azt teszi repóvá. |
git init -b main | Az első ág neve main lesz, a beállítástól függetlenül. |
git rev-parse --show-toplevel | Kiírja, melyik repó gyökerében (vagy almappájában) vagy. |
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.
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.
.git mappa belsejeA .git mappa rejtett: a sima ls nem mutatja, csak az
ls -Force (Git Bashben ls -a). Nézzünk bele! Kattints az elemekre:
később — ezek egy friss repóban még nincsenek meg: az első git add,
illetve az első commit után jelennek meg.
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.
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.
C:\Users\anna\projektek\weboldalD:\iskola\git\bemutatkozasC:\Users\anna): minden dokumentumod, letöltésed a repó része lenne;.git;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
Hozhatsz-e ide új repót?
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.
File → New repository… (Ctrl + N). A megjelenő ablak:
ℹ The repository will be created at C:\Users\anna\Documents\GitHub\desktop-repo.
Documents\GitHub mappát ajánlja, de a Choose… gombbal átállíthatod a saját
projektek mappádra.README.md-t.
Git ignore és License: sablonok (9. fejezet, illetve 4. fejezet).git init-et, és elkészíti az első commitot (Initial commit) a README-vel
és egy .gitattributes fájllal. Ezt a History fülön látod.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.
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.
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.
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.
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a saját gépeden dolgozz!
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.
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?
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?
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.
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?
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).
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?
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.
| Fogalom | Jelenté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 mappa | a 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 yet | a git status üzenete egy olyan repóban, amelyben még nincs commit |
| HEAD | mutató arra, hogy éppen melyik ágon állsz (ref: refs/heads/main) |
| objects | a .git adatbázisa: a fájltartalmak, mappák és commitok hash-sel elnevezve |
| refs/heads | az ágak: mindegyik egy fájl az ág utolsó commitjának hash-ével |
.git/config | a 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ő |
.gitkeep | szokásos nevű üres fájl, hogy egy egyébként üres mappa is bekerüljön a repóba |
.git mappa. A teljes
történet a projekt mappájában, a .git-ben van.git init: az aktuális mappát repóvá teszi. A meglévő fájlok megmaradnak, de untrackedok.git status: On branch main · No commits yet. A main ág az első
committal jön létre..git: HEAD, config, objects/,
refs/… Kézzel nem nyúlunk hozzá. Ha törlöd, a történet elvész.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.