Popravki 1. del (Sašo)

This commit is contained in:
Martin Vuk 2026-02-14 23:06:46 +01:00
parent ae940094c1
commit a455b4512e
2 changed files with 37 additions and 32 deletions

View file

@ -34,8 +34,8 @@
tudi pri pisanju besedil v \LaTeX-u. Poleg tega, da Git hrani
zgodovino sprememb, tudi olajša združevanje sprememb, ko več ljudi hkrati
ureja iste datoteke. Ogledali si bomo, kako Git deluje. Opisali bomo,
kako Git uporabi \emph{zgoščevalne funkcije}, \emph{Merklejeva drevesa}
in \emph{usmerjene aciklične grafe}, da shrani zgodovino različic in
kako Git uporabi zgoščevalne funkcije, Merklejeva drevesa
in usmerjene aciklične grafe, da shrani zgodovino različic in
olajša hkratno urejanje vsebine. Matematični model, ki ga Git uporablja,
je v resnici zelo preprost in njegovo razumevanje nas lahko reši
marsikatere zagate, ki nastane med njegovo uporabo.
@ -47,8 +47,8 @@
It is mainly used for source code management in software development. However, many of us
also use it for writing texts in \LaTeX. Besides tracking history, Git facilitates
merging changes when multiple people edit the same files simultaneously. We will look at
how Git works. We will describe how Git uses \emph{hash functions}, \emph{Merkle trees},
and \emph{directed acyclic graphs} to store version history and facilitate concurrent
how Git works. We will describe how Git uses hash functions, Merkle trees,
and directed acyclic graphs to store version history and facilitate concurrent
content editing. The mathematical model used by Git is actually very simple, and
understanding it can save us many headaches during its use.
\end{abstract}
@ -63,28 +63,28 @@
\section{Kaj je Git?}
\href{https://git-scm.com/}{Git} je kot \emph{časovni stroj} za
datoteke. Uporabniku omogoča, da vidi \emph{pretekle različice}
\href{https://git-scm.com/}{Git}\cite{git_software} je kot časovni stroj za
datoteke. Uporabniku omogoča, da vidi pretekle različice
datotek, spreminja datoteke, brez skrbi, da bi kaj pokvaril in
jih deli z drugimi. Poleg časovnega stroja je Git
tudi \emph{razpršeno skladišče datotek}. Omogoča, da datoteke
tudi 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 mape 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
različico. Vse te informacije dajejo podroben pregled nad zgodovino
sprememb.
Sisteme, ki omogočajo hranjenje preteklih različic datotek, imenujemo
\href{https://en.wikipedia.org/wiki/Version_control}{sistemi za nadzor
različic} (angl. version control system (VCS)) ali \emph{sistemi za
%\href{https://en.wikipedia.org/wiki/Version_control}
\emph{sistemi za nadzor različic} (angl. version control system (VCS)) ali \emph{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
\href{https://en.wikipedia.org/wiki/Distributed_version_control}{distribuiran
sistem za nadzor različic} (angl. Distributed Version Control System
%\href{https://en.wikipedia.org/wiki/Distributed_version_control}
\emph{distribuiran sistem za nadzor različic} (angl. Distributed Version Control System
(DVCS)).
\begin{opomba}
@ -96,13 +96,14 @@ sistem za nadzor različic} (angl. Distributed Version Control System
\end{opomba}
V nadaljevanju si bomo ogledali, kako Git uporablja
\href{https://sl.wikipedia.org/wiki/Zgo\%C5\%A1\%C4\%8Devalna_funkcija}{zgoščevalno funkcijo}
%\href{https://sl.wikipedia.org/wiki/Zgo\%C5\%A1\%C4\%8Devalna_funkcija}
\emph{zgoščevalno funkcijo}
(angl. hash function) in posplošitev
\href{https://en.wikipedia.org/wiki/Merkle_tree}{Merklejevih dreves}
za hranjenje posnetkov vsebine mape. Kako zgodovino sprememb predstavimo z
\href{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 in
%\href{https://en.wikipedia.org/wiki/Merkle_tree}
\emph{Merklejevih dreves} za hranjenje posnetkov vsebine mape. Zgodovino sprememb bomo predstavili z
%\href{https://en.wikipedia.org/wiki/Directed_acyclic_graph}
\emph{usmerjenim grafom}, v katerem so vozlišča različice, povezave pa
povežejo različice z njihovimi neposrednimi predhodniki. Spoznali bomo,
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?
@ -119,7 +120,7 @@ Ko ustvarimo nov Git repozitorij, Git ustvari podmapo z imenom
\item
drevesna struktura korenske mape, ki jo hranimo v repozitoriju,
\item
posnetki stanja v različnih trenutkih s podatki o avtoju, datumu in
posnetki stanja v različnih trenutkih s podatki o avtorju, datumu in
opisu sprememb,
\item
kazalci na posamezne posnetke stanja.
@ -152,11 +153,11 @@ 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 trka
(glej poglavje \ref{sec_trk}). Verjetnost trka
(glej razdelek \ref{sec_trk}). Verjetnost trka
je izjemno majhna, zato Git lahko predpostavi, da je niz \(b\) enolično
določen z njegovo 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
Git uporablja \(160\) bitno zgoščevalno funkcijo \emph{SHA1}, ki se jo
uporablja 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
@ -481,8 +482,10 @@ Opremljeni z razumevanjem podatkovnega modela Gita, lažje razumemo
posamezne operacije, ki jih Git omogoča. Ukazov ne bom
prevajal, ampak jih bom navedel kot jih pozna program \texttt{git}.
\texttt{git status} - preveri, če je prišlo do kakšne spremembe od zadnjeag vnosa in prikaže datoteke, ki so se spremenile.
\begin{verbatim}
git checkout referenca
git checkout referenca
\end{verbatim}
spremeni datoteke v delovni kopiji tako, da se ujemajo z vnosom, na
katerega kaže \texttt{referenca}. Poleg tega prestavi oznako \texttt{HEAD} na
@ -491,25 +494,19 @@ referenca oznaka ali zgostitev vnosa, priedmo v stanje brez aktivne veje
(angl. \emph{deteached HEAD}).
\begin{verbatim}
git commit -m "Sporočilo za vnos"
git commit -m "Sporočilo za vnos"
\end{verbatim}
ustvari nov vnos, ki kaže na stanje v čakalnici (angl. staging area ali
index). V zgodovinskem grafu ustvari novo vozlišče, ki je povezano s
prejšnjim vnosom. Poleg tega prestavi aktivno vejo in oznako
\texttt{HEAD} na novo ustvarjeni vnos.
\begin{verbatim}
git add bla.txt
\end{verbatim}
doda vsebino spremenjene datoteke \texttt{bla.txt} v čakalnico. Ukaz ne
\texttt{git add bla.txt} - doda vsebino spremenjene datoteke \texttt{bla.txt} v čakalnico. Ukaz ne
spreminja zgodovinskega grafa, pač pa doda novo vsebino in datotečna
drevesa, ki vsebujejo spremembe v shrambo objektov. Vsebina čakalnice bo
zabeležena v naslednjem vnosu.
\begin{verbatim}
git pull
\end{verbatim}
pobere vsebino (objekte in reference) iz oddaljenega repozitorija in
\texttt{git pull} - pobere vsebino (objekte in reference) iz oddaljenega repozitorija in
uskladi lokalno vejo z oddaljeno. Shrambi objektov se preprosto doda
nove objekte, ki so v oddaljeni veji. Če je lokalna veja prednik
oddaljene, se lokalna veja enostavno prestavi, da kaže na isti vnos, kot

View file

@ -68,3 +68,11 @@
pages = {369--378},
file = {Full Text PDF:C\:\\Users\\marti\\Zotero\\storage\\9CPCST7H\\Merkle - 1988 - A Digital Signature Based on a Conventional Encryption Function.pdf:application/pdf},
}
@software{git_software,
author = {Linus Torvalds and Junio C Hamano and others},
title = {Git},
url = {https://git-scm.com/},
urldate = {2026-02-14},
version = {2.48.1},
year = {2026},
}