Popravi uvodno poglavje

This commit is contained in:
Martin Vuk 2026-01-01 19:47:52 +01:00
parent 6546899abb
commit b2e58d6570
2 changed files with 3241 additions and 2130 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,6 @@
#set page("a4", margin: 20mm)
#set heading(numbering: "1.")
#show heading: block.with(below: 1.5em)
#set text(lang: "sl")
#show link: set text(blue)
#import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node
@ -9,36 +11,49 @@
#include "git-figure.typ"
#align(center)[
= Git za matematike
#set text(size:2em)
*Git za matematike*
]
#v(2em)
Naučili se bomo, *kako Git deluje*. Spoznali bomo, da so v ozadju Gita
*vsebinsko naslovljiva shramba podatkov*, *Merklejeva drevesa* in *usmerjen aciklični graf*.
*vsebinsko naslovljiva shramba podatkov*, *Merklejeva drevesa* in *usmerjeni aciklični grafi*.
*Cilj:* Razumeti _logiko_ Gita. Ko razumemo, kaj je v ozadju, lahko operacije, kot so `merge`,
`rebase` in `reset` preporsto razložimo s preoblikovanjem grafa in premikanjem kazalcev po grafu.
*Čas branja:* 30 min
== Kaj je Git?
= Kaj je Git?
#link("https://git-scm.com/")[Git] je kot *časovni stroj* za datoteke. Uporabniku omogoča, da vidi *pretekle različice* datotek,
sprememinja datoteke, *brez skrbi, da bi kaj pokvaril* in datoteke *deli z drugimi*.
Git namreč hrani vsebino direktorija z datotekami in celotno zgodovino različic datotek iz preteklosti.
Za vsako različico hrani Git zapis o avtorju, datumu in opis sprememb, ki so nastale v primerjavi s predhodno
različico.
sprememinja datoteke, *brez skrbi, da bi kaj pokvaril* in datoteke *deli z drugimi*. Poleg časovnega stroja je
Git *razpršeno skladišče datotek*. Omogoča, da datoteke *hkrati ureja več uporabnikov* na različnih računalnikih in
kasneje spremembe *združi*.
Git hrani vsebino direktorija z datotekami in celotno zgodovino različic datotek iz preteklosti.
Za vsako različico hrani Git zapis o avtorju, datumu in opis sprememb, ki so nastale v primerjavi s predhodno
različico. Vse te imformacije dajejo podroben pregled nad zgodovino sprememb.
#note[
Sisteme, ki omogočajo hranjenje preteklih različic datotek, imenujemo
#link("https://en.wikipedia.org/wiki/Version_control")[sistemi za nadzor različic] (angl. version control system (VCS)) ali
_sistemi za upravljanje z izvorno kodo_ (angl. Source Code Management (SCM)).
Poleg nadzora različic Git omogoča, da datoteke spreminja več uporabnikov na različnih računalnikih hkrati.
Poleg nadzora različic Git omogoča hkratno spreminjanje datotek več uporabnikov na različnih računalnikih.
Zato je Git #link("https://en.wikipedia.org/wiki/Distributed_version_control")[distribuiran sistem za nadzor različic]
(angl. Distributed Version Control System (DVCS)).
]
V nadaljevanju bomo obravnavali nasledjne teme:
- _Podatkovno skladišče:_ Kako Git uporablja #link("https://sl.wikipedia.org/wiki/Zgo%C5%A1%C4%8Devalna_funkcija")[zgoščevalno funkcijo]
in #link("https://en.wikipedia.org/wiki/Merkle_tree")[Merklejeva drevesa] za hranjenje posnetkov vsebine direktorija.
- _Zgodovina sprememb:_ Kako zgodovino predstavimo z #link("https://en.wikipedia.org/wiki/Directed_acyclic_graph")[usmerjenim acikličnim grafom],
v katerem so vozlišča različice in ki povezuje različice z njihovimi neposrednimi predhodniki.
- _Reference_: Kako preproste reference (kazalci) na vsebino omogočajo bliskovito
preklaplanje med različicami in preprečijo popolno zmešnjavo, ko več ljudi hkrati spreminja iste datoteke.
= Podatkovno skladišče
== Git repozitorij
@ -91,12 +106,14 @@ datotekah in direktorijih, ki jih vsebuje.
#note[
Skladišča objektov v Gitu je
#link("https://en.wikipedia.org/wiki/Content-addressable_storage")[skladišče vsebinsko naslovljivih objektov].
Dostop do objekta je mogoč, če poznamo *zgoščeno vrednost* njegove vsebine. Dejansko je referenca na
posamezen objekt v Gitu preprosto zgoščena vrednost vsebine tega objekta. Poleg tega deluje zgoščena vrednost vsebine kot kontrolna vsota. To pomeni, da lahko enostavno preverimo verodostojnost vsebine, ki je shranjena v Gitu. Skladišče objektov je v direktoriju `.git/objects`.
Dostop do objekta je mogoč, če poznamo *zgoščeno vrednost* njegove vsebine. To pomeni, da je referenca na
posamezen objekt v Gitu preprosto zgoščena vrednost(angl. hash) vsebine tega objekta. Po drugi strani je
vsebina objekta določena z njegovo zgoščeno vrednostjo. To pomeni, da lahko enostavno preverimo verodostojnost vsebine, ki je shranjena v Gitu. Git hrani skladišče objektov v direktoriju `.git/objects`.
]
== Zgodovinski graf sprememb
Posamezni vnosi so povezani v *usmerjen acikličen graf* (angl. kratica *DAG*), ki ponazarja zgodovino sprememb.
Vsak *vnos* je *vozlišče* v grafu in izhaja iz enega ali več starševskih vnosov. Izjema je prvi vnos.
= Zgodovinski graf sprememb
Posamezni vnosi so povezani v *usmerjen acikličen graf (DAG)*, ki predstavlja zgodovino sprememb.
Vsak *vnos* je *vozlišče* v grafu. Vsak vnos izhaja iz enega ali več starševskih vnosov. Izjema je prvi vnos.
*Povezave* v grafu povezujejo vnose z njihovimi starši.
#figure(
@ -121,7 +138,7 @@ Vsak *vnos* je *vozlišče* v grafu in izhaja iz enega ali več starševskih vno
caption: [Vnosi v Gitu kot usmerjen graf. Vsak vnos(razen prvega) ima povezavo na vnose iz katerih izhaja.],
)
== Reference: veje in značke
= Kazalci: veje in značke
Poleg objektov kot so _vnosi_, _posnetki direktorijev_ in _posnetki datotek_ pozna Git še reference. Reference so kazalci z določenim imenom na posamezen vnos.
@ -223,3 +240,11 @@ Glagoli (akcije):
- *Rebase* prestavi vnose v trenutno izbrani veji na izbran vnos: `git rebase main`
Opis dela z Gitom presega namen tega dokumenta. Zato vas raje preusmerimo na uradno dokumentacijo:
#align(center, text(size: 1.5em)[https://git-scm.com/cheat-sheet])
Pri pripravi dokumenta sem uporabil Gemini 3. Vse odgovore sem preveril in uredil po svoje.
Sledi še skica, ki povzame vse komponente Git repozitorija.
#include "git-figure.typ"