From a455b4512e71b11f666a1d2e4ea8c8d0663d0a80 Mon Sep 17 00:00:00 2001 From: Martin Vuk Date: Sat, 14 Feb 2026 23:06:46 +0100 Subject: [PATCH] =?UTF-8?q?Popravki=201.=20del=20(Sa=C5=A1o)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- git-obzornik.tex | 61 +++++++++++++++++++++++------------------------- reference.bib | 8 +++++++ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/git-obzornik.tex b/git-obzornik.tex index 0d68140..ead3ab8 100644 --- a/git-obzornik.tex +++ b/git-obzornik.tex @@ -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 diff --git a/reference.bib b/reference.bib index e5ac59a..bb65f86 100644 --- a/reference.bib +++ b/reference.bib @@ -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}, +} \ No newline at end of file