From 223d78f6e17423e3f300018764e3f8c643a5feaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com> Date: Thu, 8 Oct 2020 21:19:35 +0200 Subject: [PATCH] added how does commit stored and stuff related to it --- docs/workshop/2_basics.md | 133 +++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) diff --git a/docs/workshop/2_basics.md b/docs/workshop/2_basics.md index 4c9e0d5..ca826b1 100644 --- a/docs/workshop/2_basics.md +++ b/docs/workshop/2_basics.md @@ -107,9 +107,73 @@ Gyakorlatilag mikor egy tĂĄvoli git repo-t leszedĂźnk, akkor ezt a mappĂĄt kapjuk meg. EbbĹl ezutĂĄn a git alkalmazĂĄsunk elĹĂĄllĂtja nekĂźnk a master ĂĄg legutĂłbbi mentĂŠspontjĂĄt. +#### Hogyan tĂĄrolĂłdnak a mentĂŠseink? + +Egy logikus megoldĂĄsnak tĹąnhet, hogy az egyes fĂĄjlok kĂśzt +csak az eltĂŠrĂŠseket tĂĄroljuk. PĂŠldĂĄul: + +```gyumolcskosar +1. mentĂŠs: +alma + +2. mentĂŠs: +[1.mentĂŠs 1.sora] +alma +``` + +Ez annyibĂłl jĂł, hogy a tĂĄrhellyel spĂłrol, viszont nem gyors. +KĂŠpzeljĂźnk el egy 1000 commit-bĂłl ĂĄllĂł repo-t. +Mi tĂśrtĂŠnik mikor a legutĂłbbit lekĂŠrjĂźk? + +Erre egyik megoldĂĄs mĂĄs verziĂłkezelĹknĂŠl, hogy optimalizĂĄlnak +ĂŠs mondjuk 50 mentĂŠsenkĂŠnt csinĂĄlnak egy teljes mentĂŠst, stb. + +A Git ezt Ăşgy oldja meg, hogy egy mentĂŠs az Ăśsszes fĂĄjlt +egy az egybe lemĂĄsolja. +PĂŠldĂĄul egyik mentĂŠs alkalmĂĄval feltĂśltĂśk egy 1gb-os videĂłt, +majd a kĂśvetkezĹ mentĂŠskor tĂśrlĂśm, akkor az a videĂł +benne marad a git repo-ban. +Persze utĂłlag tudunk olyat, hogy kitĂśrĂśljĂźk az adott mentĂŠsbĹl, +de ez nem ajĂĄnlott hasznĂĄlata a Git-nek. + +OkĂŠ, tehĂĄt pĂŠldĂĄul mappĂĄkba bemĂĄsolja a mentĂŠseinket valamilyen +mĂłdon, de mĂŠgis hova? + +``` +$ tree .git/objects/ +.git/objects/ +âââ 13 +â  âââ 46dac32baea8123272f60b6a04227fe3872bdb +... +âââ e6 +â  âââ 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +âââ f4 +â  âââ 5a6ff55496414b573e97064e998f065182eeee +âââ info +âââ pack +``` + +MĂŠgis mik ezek? +A Git tĂśmĂśrĂtve ĂŠs titkosĂtottan hashelve tĂĄrolja a fĂĄjlokat. +A hashelĂŠsnek annyi a lĂŠnyege, hogy a fĂĄjl teljes tartalmĂĄn +ĂĄtfuttatunk egy algoritmust, mely ezutĂĄn kikĂśp egy 0-9a-z +szĂśveget ĂŠs ha akĂĄr 1 bit-et is vĂĄltoztatunk egy fĂĄjlon, akkor +mĂĄs lesz a hash-e, sĹt a titkosĂtĂĄs miatt mĂŠg feltĂśrni is +lehetetlen. +TehĂĄt ha valaki elcommitol valamit, akkor azt mĂĄr mĂĄs nem tudja +megvĂĄltoztatni anĂŠlkĂźl, hogy vĂĄltozna a hash. +Ăgy tudjuk biztosĂtani a teljes konzisztenciĂĄt az elosztott +repo-k kĂśzĂśtt. + +Hash-t lĂĄthatunk pĂŠldĂĄul a mentĂŠspontjainkon, fĂĄjljainkon, stb. + +EnnĂŠl jobban nem megyek bele a tĂŠmĂĄba, de ĂŠrdekes olvasmĂĄny. +A lĂŠnyeg, hogy mindenhol ott vannak a hash-ek, ĂŠs erre mindjĂĄrt +lĂĄtunk pĂŠldĂĄt. + #### VĂĄltoztatĂĄsok mentĂŠse -Na de hogyan mentĂźnk ebbe az adatbĂĄzisba? +Na de hogyan kĂŠszĂtĂźnk ilyen mentĂŠseket? A fĂĄjljainknak kĂźlĂśnbĂśzĹ ĂĄllapotai lĂŠtezhetnek egy repo-ban. @@ -277,6 +341,71 @@ $ git add gyumolcskosar $ git commit -m "Raktam bele egy kĂśrtĂŠt" ``` -#### Hogyan tĂĄrolĂłdnak a mentĂŠseink? +KĂŠszĂtsĂźnk egy Ăşj fĂĄjlt `hordo` nĂŠven ĂŠs nĂŠzzĂźk mit Ăr ki +a `git status -s` parancs. + +``` +$ git status -s +?? hordo +``` + +Ezzel a kapcsolĂłval kĂŠpesek vagyunk egy rĂśvidĂtett stĂĄtuszt +lekĂŠrni. StageljĂźk majd pedig commitoljuk el +`"Hoztunk egy hordĂłt"` Ăźzenettel. A lĂŠpĂŠsek kĂśzt nĂŠzzĂźk meg +mit Ăr ki a `git status -s`. + +Mi van akkor, ha valami fĂĄjlt nem szeretnĂŠnk verziĂłkontroll +alĂĄ tenni? Gondolok pĂŠldĂĄul a build-ek mappĂĄira vagy +adott EszkĂśz ĂĄltal generĂĄlt fĂĄjlokra? + +Hozzunk lĂŠtre egy `.gitignore` fĂĄjlt ĂŠs egy `jegyzeteim.txt` +fĂĄjlt. +EzutĂĄn adjuk ki a `git status` parancsot. +LĂĄthatjuk, hogy a `jegyzeteim` fĂĄjl nem jelent meg, tehĂĄt +ignorĂĄljuk a fĂĄjlt. Stage-ljĂźk, majd mentsĂźk el a fĂĄjlt a +`git add .`, `git commit -m "jegyzeteim ignorĂĄlĂĄsa"` + +#### FĂĄjlok mozgatĂĄsa + +A git semmi adatot nem tĂĄrol vĂĄltozĂĄsokrĂłl, csak +mentĂŠseket kĂŠszĂt, ahogy emlĂtettem az elĹzĹ rĂŠszben. +PrĂłbĂĄljuk ki, hogy mi tĂśrtĂŠnik ha ĂĄtnevezĂźnk egy fĂĄjlt? + +``` +mv gyumolcskosar gyumolcskosar.txt +``` + +``` +git status +On branch master +Changes not staged for commit: + (use "git add/rm <file>..." to update what will be committed) + (use "git restore <file>..." to discard changes in working directory) + deleted: gyumolcskosar + +Untracked files: + (use "git add <file>..." to include in what will be committed) + gyumolcskosar.txt + +no changes added to commit (use "git add" and/or "git commit -a") +``` + +LĂĄthatĂł, hogy az eredeti fĂĄjlt "tĂśrĂśltĂźk" ĂŠs egy Ăşj +fĂĄjlt vettĂźnk fel a repo-ba. Ărdekes, mi lenne ha stagelnĂŠnk +a vĂĄltoztatĂĄsokat? + +``` +$ git add . +$ git status +On branch master +Changes to be committed: + (use "git restore --staged <file>..." to unstage) + renamed: gyumolcskosar -> gyumolcskosar.txt +``` + +Most meg mĂĄr lĂĄtszik, hogy csak ĂĄtnevezĂŠs tĂśrtĂŠnt? + +A Git kĂŠpes rĂĄ, hogy felismerje a fĂĄjlokat ĂŠs eldĂśntse, hogy +ugyanaz volt a kettĹ, tehĂĄt ĂĄtnevezĂŠs tĂśrtĂŠnt. [ElĹzĹ](workshop/1_installation) | [KĂśvetkezĹ](workshop/3_branch) -- GitLab