Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Git Presentation
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Réthelyi Bálint
Git Presentation
Commits
223d78f6
Commit
223d78f6
authored
4 years ago
by
Rafael László
Browse files
Options
Downloads
Patches
Plain Diff
added how does commit stored and stuff related to it
parent
bc816bed
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
docs/workshop/2_basics.md
+131
-2
131 additions, 2 deletions
docs/workshop/2_basics.md
with
131 additions
and
2 deletions
docs/workshop/2_basics.md
+
131
−
2
View file @
223d78f6
...
@@ -107,9 +107,73 @@ Gyakorlatilag mikor egy távoli git repo-t leszedünk, akkor
...
@@ -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
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.
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
#### 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
A fájljainknak különböző állapotai létezhetnek egy
repo-ban.
repo-ban.
...
@@ -277,6 +341,71 @@ $ git add gyumolcskosar
...
@@ -277,6 +341,71 @@ $ git add gyumolcskosar
$ git commit -m "Raktam bele egy körtét"
$ 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
)
[
Előző
](
workshop/1_installation
)
|
[
Következő
](
workshop/3_branch
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment