diff --git a/git-figure.typ b/git-figure.typ
index 46f838b..ffcd300 100644
--- a/git-figure.typ
+++ b/git-figure.typ
@@ -167,6 +167,7 @@ Add bla".replace("16f299", Eh).replace("65c47fee", tree1h)
node((rel: (4cm, -2.5cm), to: ), align(center)[Content addressable object store \ #raw(".git/objects")], stroke: none, snap: false )
commit-object((rel: (1.5, 2), to: ), E1h, [Add bla], name: )
commit-object((rel: (1.5, 3), to: ), Eh, [Merge commit], name: )
+ edge(, , stroke: thin, "->")[parent]
tree-object((rel:(-1, 0), to: ), tree1h, [tree], name:)
edge(, , stroke: thin, "->")
tree-object((rel:(-1, 0), to: ), "e05dcd",[tree], name: )
diff --git a/git-intro.typ b/git-intro.typ
index 7266c0f..2816c75 100644
--- a/git-intro.typ
+++ b/git-intro.typ
@@ -12,7 +12,7 @@
#align(center)[
#set text(size:2em)
-*Git za matematike*
+*Git bolj podrobno*
]
#v(2em)
@@ -26,23 +26,24 @@ Naučili se bomo, *kako Git deluje*. Spoznali bomo, da so v ozadju Gita
= Kaj je Git?
+#note[
#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*. 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 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]
@@ -54,11 +55,42 @@ V nadaljevanju bomo obravnavali nasledjne teme:
= Podatkovno skladišče
-
== Git repozitorij
-Git repozitorij je direktorij v katerem je poddirektorij `.git`, ki vsebuje vso zgodovino sprememb in ostale podatke,
-ki jih Git potrebuje.
+Ko ustvarimo nov Git repozitorij, Git ustvari podmapo `.git`, ki vsebuje vso zgodovino sprememb in ostale podatke,
+ki jih Git potrebuje. V mapi `.git` se hranijo naslednje stvari:
+- zgodovinske različice datotek, ki smo jih dodali v repozitorij,
+- drevesna struktura korenske mape in podmap,
+- posnetki stanja v razlićnih trenutkih s podatki o avtorju, datumu in opisom sprememb in
+- kazalci na posamezne posnetke stanja.
+
+Git repozitorij je vsaka mapa, ki vsebuje podmapo `.git` z zgoraj
+navedenimi podatki. Kako Git hrani podatke bomo spoznali v
+nadaljevanju, podrobnosti pa si lahko preberete v knjigi
+#link("https://git-scm.com/book/en/v2/Git-Internals-Git-Objects")[Pro Git].
+
+== Zgoščevalna funkcija in vsebinsko naslovljiva shramba
+
+Git ne shranjuje datotek z običajnimi imeni, ampak za ime uporabi 160
+bitno število (40 mestno število v 16-tiškem zapisu), ki ga izračuna iz
+vsebine datoteke. Git za izračun imena uporabi *zgoščevalno
+ funkcijo* (angl. *hash function*) SHA1, ki vsakemu besedilu priredi
+ $160$-bitno vrednost. Vrednosti zgoščevalne funkcije pravimo *zgostitev*
+ (angl. *hash*) vsebine. Git hrani datoteke pod imeni, ki so enaka zgostitvi
+vsebine#footnote[Načeloma imata lahko dve različni vsebini isto zgostitev.
+Če se to zgodi, rečemo, da pride do *trka
+ zgostitve* (angl. *hash colision*). Vendar je verjetnost trka tako majhna, da lahko
+ predpostavimo, da se to v praksi ne bo zgodilo.].
+
+#note[
+Git hrani različne verzije datotek v
+#link("https://en.wikipedia.org/wiki/Content-addressable_storage")[vsebinsko
+ naslovljivi shrambi objektov], pod imeni, ki so enaka zgostitvi vsebine in ne imenu datoteke.
+Ta način shranjevanja omogoča, da lahko:
+- preverimo, če ima shranjenjena vsebina isto zgostitev, kot je njeno ime,
+- shranimo več različic iste datoteke, saj ima vsaka različica drugačno zgostitev,
+- preverimo, če je prišlo do kvaritve podatkov, ki so shranjeni v Git repozitoriju.
+]
== Vnos: posnetek stanja
Osnovna enota v Gitu je *vnos* (angl. *commit*). Vnos je posnetek stanja zabeleženih datotek v trenutku,
@@ -248,3 +280,21 @@ Pri pripravi dokumenta sem uporabil Gemini 3. Vse odgovore sem preveril in uredi
Sledi še skica, ki povzame vse komponente Git repozitorija.
#include "git-figure.typ"
+
+= Dodatek
+
+== Trki zgostitev in rojstnodnevni problem
+
+Vendar je zgoščevalna funkcija
+izbrana tako, da sprememba enega samega bita v besedilu
+spremeni vrednost in je verjetnost trka izjemno majhna. Zato Git lahko predpostavi, da je vsebina
+datoteke natanko določena z njeno zgostitvijo. \(H(b)\).
+Git uporablja \(160\) bitno zgoščevalno funkcijo \emph{SHA1}, ki se je
+uporabljala v kriptografiji\footnote{Leta 2017 so raziskovalci iz CWI
+ Amsterdam in Google Research našli prvi praktični primer dveh
+ različnih pdf datotek, ki imata isto SHA1
+ zgostitev\cite{stevens_first_2017}. Opisan napad so poimenovali
+ \emph{SHAttered}. Git je zato z verzijo \texttt{v2.13.0} začel
+ uporabljati verzijo SHA1, ki je odporna proti napadu \emph{SHAttered}.
+ Kljub temu razvijalci Gita načrtujejo, da bodo SHA1 postopoma
+ nadomestili s $256$ bitno zgoščevalno funkcijo SHA-256.}.
diff --git a/git-obzornik.typ b/git-obzornik.typ
index 69d0cb7..993b442 100644
--- a/git-obzornik.typ
+++ b/git-obzornik.typ
@@ -152,7 +152,7 @@ vsebina objekta določena z njegovo zgostitvijo. To pomeni, da lahko enostavno p
]
-== trk zgostitev in rojstnodnevni paradoks
+== Trk zgostitev in rojstnodnevni paradoks
Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Če imata dve datoteki z različno vsebino
isto zgostitev, Git shrani le eno datoteko in pride do izgubil podatkov. Git se zanaša na to, da je verjetnost za to izjemno majhna.