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 page("a4", margin: 20mm)
#set heading(numbering: "1.")
#show heading: block.with(below: 1.5em)
#set text(lang: "sl") #set text(lang: "sl")
#show link: set text(blue) #show link: set text(blue)
#import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node #import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node
@ -9,36 +11,49 @@
#include "git-figure.typ" #include "git-figure.typ"
#align(center)[ #align(center)[
= Git za matematike #set text(size:2em)
*Git za matematike*
] ]
#v(2em) #v(2em)
Naučili se bomo, *kako Git deluje*. Spoznali bomo, da so v ozadju Gita 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`, *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. `rebase` in `reset` preporsto razložimo s preoblikovanjem grafa in premikanjem kazalcev po grafu.
*Čas branja:* 30 min *Č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, #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*. sprememinja datoteke, *brez skrbi, da bi kaj pokvaril* in datoteke *deli z drugimi*. Poleg časovnega stroja je
Git namreč hrani vsebino direktorija z datotekami in celotno zgodovino različic datotek iz preteklosti. 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 Za vsako različico hrani Git zapis o avtorju, datumu in opis sprememb, ki so nastale v primerjavi s predhodno
različico. različico. Vse te imformacije dajejo podroben pregled nad zgodovino sprememb.
#note[ #note[
Sisteme, ki omogočajo hranjenje preteklih različic datotek, imenujemo 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 #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)). _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] Zato je Git #link("https://en.wikipedia.org/wiki/Distributed_version_control")[distribuiran sistem za nadzor različic]
(angl. Distributed Version Control System (DVCS)). (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 == Git repozitorij
@ -89,14 +104,16 @@ datotekah in direktorijih, ki jih vsebuje.
caption: [Primer posnetka direktorija v Gitu (objekt tipa `tree`). Posnetek vsebuje zgoščene vrednosti datotek in direktorija, ki jih vsebuje. Uporaba zgoščenih vrednosti natančno določa vsebino posnetka direktorija.], caption: [Primer posnetka direktorija v Gitu (objekt tipa `tree`). Posnetek vsebuje zgoščene vrednosti datotek in direktorija, ki jih vsebuje. Uporaba zgoščenih vrednosti natančno določa vsebino posnetka direktorija.],
) )
#note[ #note[
Skladišča objektov v Gitu je Skladišča objektov v Gitu je
#link("https://en.wikipedia.org/wiki/Content-addressable_storage")[skladišče vsebinsko naslovljivih objektov]. #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 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 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`. 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. = Zgodovinski graf sprememb
Vsak *vnos* je *vozlišče* v grafu in izhaja iz enega ali več starševskih vnosov. Izjema je prvi vnos. 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. *Povezave* v grafu povezujejo vnose z njihovimi starši.
#figure( #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.], 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. 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` - *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"