2. témakör · Helyi munka: az első commitok · 7. fejezet
Commitolni már tudsz, most megtanulod, hogyan jól kell. Mekkora legyen egy commit, mit írj az üzenetébe, és hogyan segít a Conventional Commits szabvány, hogy a projekt története évek múlva is olvasható legyen, neked és a csapatodnak is.
feat, fix, docs …).A commitok története a projekt naplója. Hónapok múlva ebből derül ki, mikor és miért változott valami, ki és melyik változtatással rontott el valamit, és mit lehet biztonságosan visszavonni. Hasonlítsd össze ugyanannak a projektnek két változatát:
✗ Nehezen használható történet
$ git log --oneline e41b7c2 javítás 9a0d3f1 asdf 5c27e8a módosítások b81f0d4 péntek délutáni munka 2f6a9c3 first
✓ Olvasható történet
$ git log --oneline e41b7c2 fix: kosár végösszegének kerekítése 9a0d3f1 feat: e-mail-cím ellenőrzése az űrlapon 5c27e8a feat: kapcsolat űrlap b81f0d4 style: menü színeinek egységesítése 2f6a9c3 Kezdőlap első változata
A bal oldaliból semmi nem derül ki. A jobb oldaliból egy pillantással látszik, mikor jelent meg az űrlap, és melyik commit javította a kosarat. Ha a kerekítés miatt új hiba jelentkezik, pontosan tudod, melyik commitot kell megnézni vagy visszavonni (10. fejezet).
Az atomi commit egyetlen, logikailag összetartozó változást tartalmaz, és a projekt utána is működőképes. Nem túl kicsi (fél változtatás) és nem túl nagy (három különböző dolog egyben).
| Túl kicsi | Jó méret | Túl nagy | |
|---|---|---|---|
| Példa | „HTML az űrlaphoz”, majd külön „CSS az űrlaphoz”, pedig CSS nélkül az űrlap használhatatlan | „Kapcsolat űrlap”: HTML, CSS és menüpont együtt | „Űrlap, elírások javítása, README, új színek” |
| Gond | a köztes commit félkész, nem működő állapot | — | nem lehet csak az egyik részét visszavonni, és nehéz átnézni |
Ha közben több dolgon is dolgoztál, a git add-dal (Desktopban a pipákkal) szétválogathatod a
változásokat: előbb csak a hibajavítás fájljait készíted elő és commitolod, aztán a többit. Ezért van előkészítési terület
(6. fejezet).
Ha az egész fájlt újraformázod (behúzások, szóközök), és közben egy sort érdemben is módosítasz, a változáslistában
száz sor változik, és a fontos egy sor elveszik közöttük. A formázás kerüljön külön commitba
(pl. style: kódformázás).
Egy délután alatt ezeket a változtatásokat végezted el a webshopon. Bontsd őket jó, atomi commitokra! Jelöld ki, amelyek együtt egy commitba valók, írj hozzá üzenetet, és kattints a Commit gombra.
A commitüzenet a tárgysorból, egy üres sorból és a nem kötelező törzsből áll, a végén esetleg lábléccel:
git log --oneline-ban, a GitHub commitlistájában és a
GitHub Desktop History fülén. Ennek magában is érthetőnek kell lennie.Refs: #12,
Closes #12, 23. fejezet), vagy a társszerzőt (Co-authored-by: …).Sok változtatáshoz elég egyetlen jó tárgysor. A törzs akkor kell, ha van mit megmagyarázni.
feat: ….)| ✗ Rossz | Mi a baj? | ✓ Jobb |
|---|---|---|
javítás | Mit javított? | Kosár végösszegének kerekítési hibája |
asdfgh · wip · ... | semmitmondó | Termékkártya elrendezése flexboxszal |
index.html frissítve | csak a fájlnév | Kapcsolat menüpont a navigációban |
Űrlap, színek, elírás és README | négy dolog egy commitban | négy külön commit |
Javítottam a hibát amit Peti talált tegnap az órán a kosárnál. | túl hosszú, pont a végén, a lényeg („mi volt a hiba”) hiányzik | Kosár: negatív darabszám tiltása |
péntek délutáni munka | az idő nem információ | a tényleges változások, külön commitokban |
Mindkét üzenet ugyanarról a változásról szól. Melyiket választanád?
A Conventional Commits (conventionalcommits.org) egy elterjedt szabvány, amely
egységes szerkezetet ad a tárgysornak. Egy pillantásra látszik belőle a változás típusa, és programok is fel
tudják dolgozni, például automatikus változásnaplót vagy verziószámot készíthetnek belőle.
<típus>[(hatókör)][!]: <rövid leírás> [törzs] [lábléc]
| Típus | Mikor? | Példa |
|---|---|---|
feat | új funkció | feat: kapcsolat űrlap |
fix | hibajavítás | fix(kosar): negatív darabszám tiltása |
docs | csak dokumentáció (README, megjegyzések) | docs: telepítési lépések a README-ben |
style | formázás, a működés nem változik | style: behúzások egységesítése |
refactor | átszervezés, a viselkedés nem változik | refactor: árkalkuláció külön függvénybe |
test | tesztek | test: kosár összegének tesztjei |
perf | gyorsítás | perf: képek késleltetett betöltése |
build · ci | fordítás, függőségek · automatizálás (27. fejezet) | ci: tesztek futtatása minden pushnál |
chore | egyéb karbantartás | chore: .gitignore bővítése |
fix(kosar): ….feat!: …) vagy a BREAKING CHANGE: lábléc jelzi, hogy a változás
nem visszafelé kompatibilis. Emiatt a régi használati mód már nem működik.fix → javítóverzió (1.0.1),
feat → alverzió (1.1.0), breaking → főverzió (2.0.0).Nem, a Git bármilyen üzenetet elfogad. A Conventional Commits egy csapatszabály. Sok nyílt forráskódú projekt és cég használja, és iskolai csapatmunkában is jó közös nyelv. Amit egy projektben megszavaztatok, azt következetesen tartsátok be.
Írj be egy commitüzenetet, és az ellenőrző megmondja, mennyire felel meg a fenti szabályoknak. Az első sor a tárgysor; ha törzset is írsz, hagyj ki előtte egy üres sort.
| Hol? | Hogyan? |
|---|---|
CLI két -m | git commit -m "fix: kosár kerekítése" -m "A kedvezmény után tizedes fillér maradt."Az első -m a tárgysor, a második a törzs; a Git közéjük teszi az üres sort. |
| CLI szerkesztő | git commit (-m nélkül): megnyílik a VS Code (core.editor). 1. sor: tárgy, 2. sor: üres, utána a törzs.
Mentés, majd a fül bezárása. A #-tel kezdődő sorokat a Git kihagyja. |
| Desktop GitHub Desktop | Summary = tárgysor, Description = törzs. Ha a Summary 50 karakternél hosszabb, a Desktop figyelmeztet, hogy a többit a Description mezőbe írd. |
| Desktop VS Code | A Source Control üzenetmezőjében Enter-rel új sort kezdhetsz. Az első sor a tárgy; hagyj egy üres sort a törzs előtt. |
Ha ketten dolgoztatok egy változáson, a GitHub Desktopban az üzenetmező alatti Add co-authors ikonnal felveheted a
társad. A Desktop ilyenkor egy Co-authored-by: Tóth Péter <toth.peter@pelda.hu> láblécsort ír az
üzenetbe, és a GitHub mindkettőtök profilján jóváírja a commitot. Parancssorból ugyanezt a sort kézzel írhatod a törzs végére.
A legutolsó commit üzenete kijavítható: git commit --amend -m "jó üzenet". Ezt csak addig
tedd, amíg a commitot nem töltötted fel (push). A részleteket a 10. fejezetben tanuljuk.
A weboldal repóban három változás vár commitolásra: új README, és egy új menüpont, amely két fájlt érint.
Készíts belőlük atomi commitokat jó üzenettel! A szimulátor az üzenet-ellenőrző szabályaival ellenőrzi az
üzeneteidet. Hibás üzenet esetén a küldetés nem teljesül, ilyenkor készíts új commitot.
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás
Nézd meg a microsoft/vscode vagy a git/git repó commitlistáját a GitHubon!
Gyűjts ki három jó üzenetet. Mi a közös bennük (hossz, forma, nyelvtani alak)? Használnak-e törzset?
Írd át jó üzenetté: update · style.css · hiba javítva. ·
minden ami kellett · Megcsináltam a logint és a regisztrációt és kijavítottam a láblécet!
Ha kell, bontsd több commitra.
Az Üzenet-ellenőrzőben, bekapcsolt Conventional Commits móddal írj hibátlan üzenetet egy új funkcióhoz, egy hibajavításhoz és egy README-módosításhoz!
A saját repódban egyszerre módosítsd a fejlécet, javíts egy elírást a láblécben, és bővítsd a README-t! Készíts belőlük három
atomi commitot a git add <fájl> segítségével, majd nézd meg a git log --oneline-t.
Írj többsoros üzenetet a szerkesztőben (git commit -m nélkül)! Utána nézd meg a
git log és a git log --oneline kimenetét. Hol látszik a törzs, és hol nem?
A GitHub Desktopban írj 50 karakternél hosszabb Summaryt! Mit jelez a program? Tedd át a részleteket a Descriptionbe. Ha párban dolgoztok, vegyétek fel egymást társszerzőnek, és nézzétek meg a kész üzenetet a History fülön.
Csapatban készítsetek egyoldalas commit-szabályzatot a közös projekthez (nyelv, forma, típusok, méret, példák), és
tegyétek egy CONTRIBUTING.md fájlba a repóban. Commitoljátok a saját szabályaitok szerint!
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 |
|---|---|
| atomi commit | egyetlen logikailag összetartozó, önmagában működő változást tartalmazó commit |
| tárgysor (subject) | az üzenet első sora, kb. 50 karakter; ez látszik a listákban |
| törzs (body) | az üres sor utáni rész: mit és miért változott |
| lábléc (footer) | hivatkozások a végén: Refs: #12, Co-authored-by: …, BREAKING CHANGE: … |
| Conventional Commits | szabvány a tárgysor formájára: típus(hatókör): leírás |
feat · fix · docs | új funkció · hibajavítás · dokumentáció |
style · refactor · chore | formázás · átszervezés változatlan működéssel · karbantartás |
breaking change (!) | visszafelé nem kompatibilis változás |
| társszerző (co-author) | a commit további szerzője a Co-authored-by: láblécsorral |
git commit --amend | a legutolsó commit javítása, csak push előtt (10. fejezet) |
feat, fix, docs, style,
refactor, test, chore…, opcionális hatókör, ! a nem kompatibilis változáshoz.-m, a szerkesztő, vagy Desktopban a Summary és a Description.A következő fejezetben megtanuljuk olvasni a történetet: git log, git show,
git diff.