From a23c2e32fe1bfb2233811104f6e0130187a61c97 Mon Sep 17 00:00:00 2001 From: Martin Vuk Date: Wed, 14 Jan 2026 11:59:44 +0100 Subject: [PATCH] Majhne spremembe --- definicije.typ | 1 - diagrams/branch-move.typ | 2 +- diagrams/branches-tags.typ | 2 +- diagrams/commit-history.typ | 2 +- diagrams/file-graph.typ | 2 +- diagrams/head-index.typ | 2 +- diagrams/object-storage.typ | 2 +- git-obzornik.typ | 14 ++++++-------- 8 files changed, 12 insertions(+), 15 deletions(-) diff --git a/definicije.typ b/definicije.typ index 88774a7..21bc88e 100644 --- a/definicije.typ +++ b/definicije.typ @@ -16,6 +16,5 @@ width: 2cm, fill: blue.lighten(50%), ..args) #let file-object(coord, hash, name, ..args) = commit-object(coord, hash, name, width: 2cm, fill: gray.lighten(50%), ..args) -#let git-object(hash, content) = table(columns: 1, [Zgoščena vrednost: #raw(hash)], raw(block:true, content)) #let bla(coord, ..args) = file-object(coord, "bcc138", ..args)[bla] #let blabla(coord, ..args) = file-object(coord, "2ce22b", ..args)[blabla] diff --git a/diagrams/branch-move.typ b/diagrams/branch-move.typ index 7b1e272..f2886c1 100644 --- a/diagrams/branch-move.typ +++ b/diagrams/branch-move.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object +#import "../definicije.typ": file-object, tree-object, commit-object #diagram(node-stroke: 0.5pt, { diff --git a/diagrams/branches-tags.typ b/diagrams/branches-tags.typ index 4aa2aed..58551a8 100644 --- a/diagrams/branches-tags.typ +++ b/diagrams/branches-tags.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object +#import "../definicije.typ": file-object, tree-object, commit-object #diagram(node-stroke: 0.5pt, { diff --git a/diagrams/commit-history.typ b/diagrams/commit-history.typ index 96ee4b2..f71b0fc 100644 --- a/diagrams/commit-history.typ +++ b/diagrams/commit-history.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object +#import "../definicije.typ": file-object, tree-object, commit-object #diagram(node-stroke: 1pt, node-shape: pill, { diff --git a/diagrams/file-graph.typ b/diagrams/file-graph.typ index abd7aca..451c23e 100644 --- a/diagrams/file-graph.typ +++ b/diagrams/file-graph.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object, bla, blabla +#import "../definicije.typ": file-object, tree-object, commit-object, bla, blabla #diagram( { diff --git a/diagrams/head-index.typ b/diagrams/head-index.typ index 03e31e9..31c64bf 100644 --- a/diagrams/head-index.typ +++ b/diagrams/head-index.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object +#import "../definicije.typ": file-object, tree-object, commit-object #diagram(node-stroke: 0.5pt, { diff --git a/diagrams/object-storage.typ b/diagrams/object-storage.typ index a9d0360..083efef 100644 --- a/diagrams/object-storage.typ +++ b/diagrams/object-storage.typ @@ -1,6 +1,6 @@ #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import fletcher.shapes: house, chevron, pill -#import "../definicije.typ": file-object, tree-object, git-object, commit-object, bla, blabla +#import "../definicije.typ": file-object, tree-object, commit-object, bla, blabla #diagram( { diff --git a/git-obzornik.typ b/git-obzornik.typ index 5f4a8fd..81277e6 100644 --- a/git-obzornik.typ +++ b/git-obzornik.typ @@ -4,9 +4,7 @@ #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, node, edge -#import fletcher.shapes: house, chevron, pill -#import "definicije.typ": file-object, tree-object, git-object, commit-object +#let git-object(hash, content) = table(columns: 1, [Zgoščena vrednost: #raw(hash)], raw(block:true, content)) #let note(content) = rect(stroke: none, width: 100%, text(style: "italic", @@ -18,7 +16,7 @@ #align(center)[ -#text(size:2em)[*Matematika v Gitu*] +#text(size:2em)[*Matematični pogled na Git*] #v(2em) Martin Vuk ] @@ -59,12 +57,12 @@ Zato je Git #link("https://en.wikipedia.org/wiki/Distributed_version_control")[d ] 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] +- _Podatkovno skladišče:_ Kako Git uporablja #link("https://sl.wikipedia.org/wiki/Zgo%C5%A1%C4%8Devalna_funkcija")[zgoščevalno funkcijo] (angl. hash function)? in #link("https://en.wikipedia.org/wiki/Merkle_tree")[Merklejeva drevesa] za hranjenje posnetkov vsebine mape. - _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, povezave pa povežejo različice z njihovimi neposrednimi predhodniki. + v katerem so vozlišča različice, povezave pa povežejo 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. + preklaplanje med različicami in preprečijo popolno zmešnjavo, ko več ljudi hkrati spreminja iste datoteke? = Podatkovno skladišče @@ -84,7 +82,7 @@ Git za izračun imena uporabi _zgoščevalno funkcijo_. Naj bo $B$ množica vseh $ H: B -> {0, 1, dots, 2^(n)-1}, $ -ki vsakemu besedilu $b$ priredi $n$-bitno vrednost $H(b)$. Vrednosti zgoščevalne funkcije $H(b)$ pravimo _zgostitev_ vsebine $b$. +ki vsakemu besedilu $b$ priredi $n$-bitno vrednost $H(b)$. Vrednosti zgoščevalne funkcije $H(b)$ pravimo _zgostitev_ vsebine $b$ (angl. hash). Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Kaj pa če imata dve različni vsebini isto zgostitev? Funkcija $H$ ni injektivna, saj je množica nizov, bistveno večja od množice zgostitev. To pomeni, da imata lahko dve različni datoteki enako zgostitev. Če se to zgodi, rečemo, da pride do _kolizije zgostitve_. V primeru kolizije zgostitve bi Git shranil le eno datoteko, za drugo pa bi predpostavil da je že shranjena. Zato je funkcija $H$ izbrana tako, da sprememba enega samega bita v besedilu $b in B$ spremeni vrednost $H(b)$ in je porazdelitev vrednosti $H(b)$ čim bližje enakomerni porazdelitvi. To pomeni, da so vse vrednosti $H(b)$ približno enako verjetne. Na ta način zmanjšamo verjetnost kolizije( glej @sec_kolizije). Verjetnost kolizije je izjemno majhna, zato Git lahko predpostavi, da je niz $b$ enolično določen z njegovo zgostitvijo $H(b)$.