Peglanje
This commit is contained in:
parent
ec325e72cf
commit
4d3b048954
1 changed files with 241 additions and 248 deletions
167
git-obzornik.tex
167
git-obzornik.tex
|
|
@ -43,13 +43,13 @@ marsikatere zagate, ki nastane med njegovo uporabo.
|
||||||
|
|
||||||
\section{Kaj je Git?}
|
\section{Kaj je Git?}
|
||||||
|
|
||||||
\href{https://git-scm.com/}{Git} je kot \textbf{časovni stroj} za
|
\href{https://git-scm.com/}{Git} je kot \emph{časovni stroj} za
|
||||||
datoteke. Uporabniku omogoča, da vidi \textbf{pretekle različice}
|
datoteke. Uporabniku omogoča, da vidi \emph{pretekle različice}
|
||||||
datotek, spreminja datoteke, \textbf{brez skrbi, da bi kaj pokvaril} in
|
datotek, spreminja datoteke, brez skrbi, da bi kaj pokvaril in
|
||||||
datoteke \textbf{deli z drugimi}. Poleg časovnega stroja je Git
|
jih deli z drugimi. Poleg časovnega stroja je Git
|
||||||
\textbf{razpršeno skladišče datotek}. Omogoča, da datoteke
|
tudi \emph{razpršeno skladišče datotek}. Omogoča, da datoteke
|
||||||
\textbf{hkrati ureja več uporabnikov} na različnih računalnikih in
|
hkrati ureja več uporabnikov na različnih računalnikih in
|
||||||
kasneje spremembe \textbf{združi}.
|
kasneje spremembe združi.
|
||||||
|
|
||||||
Git hrani vsebino mape z datotekami in celotno zgodovino različic
|
Git hrani vsebino mape z datotekami in celotno zgodovino različic
|
||||||
datotek iz preteklosti. Za vsako različico hrani Git zapis o avtorju,
|
datotek iz preteklosti. Za vsako različico hrani Git zapis o avtorju,
|
||||||
|
|
@ -68,7 +68,7 @@ sistem za nadzor različic} (angl. Distributed Version Control System
|
||||||
(DVCS)).
|
(DVCS)).
|
||||||
|
|
||||||
\begin{opomba}
|
\begin{opomba}
|
||||||
Git in GitHub nista eno in isto. Ljudje pogosto mešajo Git in GitHub.
|
Ljudje pogosto mešajo Git in GitHub, ki pa nista eno in isto.
|
||||||
Git je program, ki si ga lahko vsakdo namesti in poganja na svojem
|
Git je program, ki si ga lahko vsakdo namesti in poganja na svojem
|
||||||
računalniku. Program Git je ustvaril Linus Torvalds, da bi lažje
|
računalniku. Program Git je ustvaril Linus Torvalds, da bi lažje
|
||||||
upravljal z izvorno kodo za jedro operacijskega sistema Linux. GitHub je
|
upravljal z izvorno kodo za jedro operacijskega sistema Linux. GitHub je
|
||||||
|
|
@ -124,8 +124,10 @@ bitno število (40 mestno število v 16-tiškem zapisu), ki ga izračuna iz
|
||||||
vsebine datoteke. Git za izračun imena uporabi \emph{zgoščevalno
|
vsebine datoteke. Git za izračun imena uporabi \emph{zgoščevalno
|
||||||
funkcijo}. Naj bo \(B\) množica vseh možnih podatkovnih nizov(besedil),
|
funkcijo}. Naj bo \(B\) množica vseh možnih podatkovnih nizov(besedil),
|
||||||
\(n\)-bitna zgoščevalna funkcija je funkcija
|
\(n\)-bitna zgoščevalna funkcija je funkcija
|
||||||
\[H:B \rightarrow \left\{ 0,1,\ldots,2^{n} - 1 \right\},\] ki vsakemu
|
\[
|
||||||
besedilu \(b\) priredi \(n\)-bitno vrednost \(H(b)\). Vrednosti
|
H:B \rightarrow \left\{ 0,1,\ldots,2^{n} - 1 \right\},
|
||||||
|
\]
|
||||||
|
ki vsakemu besedilu \(b\) priredi \(n\)-bitno vrednost \(H(b)\). Vrednosti
|
||||||
zgoščevalne funkcije \(H(b)\) pravimo \emph{zgostitev} vsebine \(b\)
|
zgoščevalne funkcije \(H(b)\) pravimo \emph{zgostitev} vsebine \(b\)
|
||||||
(angl. hash). Git hrani datoteke pod imeni, ki so enaka zgostitvi
|
(angl. hash). Git hrani datoteke pod imeni, ki so enaka zgostitvi
|
||||||
vsebine. Kaj pa če imata dve različni vsebini isto zgostitev? Funkcija
|
vsebine. Kaj pa če imata dve različni vsebini isto zgostitev? Funkcija
|
||||||
|
|
@ -137,8 +139,8 @@ 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\)
|
izbrana tako, da sprememba enega samega bita v besedilu \(b \in B\)
|
||||||
spremeni vrednost \(H(b)\) in je porazdelitev vrednosti \(H(b)\) čim
|
spremeni vrednost \(H(b)\) in je porazdelitev vrednosti \(H(b)\) čim
|
||||||
bližje enakomerni porazdelitvi. To pomeni, da so vse vrednosti \(H(b)\)
|
bližje enakomerni porazdelitvi. To pomeni, da so vse vrednosti \(H(b)\)
|
||||||
približno enako verjetne. Na ta način zmanjšamo verjetnost trka(
|
približno enako verjetne. Na ta način zmanjšamo verjetnost trka
|
||||||
glej \hyperref[sec_trk]{{[}sec\_trk{]}}). Verjetnost trka
|
(glej poglavje \ref{sec_trk}). Verjetnost trka
|
||||||
je izjemno majhna, zato Git lahko predpostavi, da je niz \(b\) enolično
|
je izjemno majhna, zato Git lahko predpostavi, da je niz \(b\) enolično
|
||||||
določen z njegovo zgostitvijo \(H(b)\).
|
določen z njegovo zgostitvijo \(H(b)\).
|
||||||
|
|
||||||
|
|
@ -151,11 +153,11 @@ uporabljala v kriptografiji\footnote{Leta 2017 so raziskovalci iz CWI
|
||||||
\emph{SHAttered}. Git je zato z verzijo \texttt{v2.13.0} začel
|
\emph{SHAttered}. Git je zato z verzijo \texttt{v2.13.0} začel
|
||||||
uporabljati verzijo SHA1, ki je odporna proti napadu \emph{SHAttered}.
|
uporabljati verzijo SHA1, ki je odporna proti napadu \emph{SHAttered}.
|
||||||
Kljub temu razvijalci Gita načrtujejo, da bodo SHA1 postopoma
|
Kljub temu razvijalci Gita načrtujejo, da bodo SHA1 postopoma
|
||||||
nadomestili s SHA-256.}.
|
nadomestili s $256$ bitno zgoščevalno funkcijo SHA-256.}.
|
||||||
|
|
||||||
Ko datoteko z vsebino \(b\) zabeležimo v Git repozitorij, Git izračuna
|
Ko datoteko z vsebino \(b\) zabeležimo v Git repozitorij, Git izračuna
|
||||||
zgostitev vsebine \(H(b)\) in jo shrani v datoteko z imenom \(H(b)\) v
|
zgostitev vsebine \(H(b)\) in jo shrani v datoteko z imenom \(H(b)\) v
|
||||||
\texttt{git/objects}\footnote{V resnici Git shrani vsebino v datoteko z
|
\texttt{.git/objects}\footnote{V resnici Git shrani vsebino v datoteko z
|
||||||
imenom \(h_{3}h_{4}\ldots h_{40}\) v mapi \(h_{1}h_{2}\), kjer je
|
imenom \(h_{3}h_{4}\ldots h_{40}\) v mapi \(h_{1}h_{2}\), kjer je
|
||||||
\(h_{1}h_{2}h_{3}\ldots h_{40}\) zapis \(H(b)\) v 16-tiškem sistemu.
|
\(h_{1}h_{2}h_{3}\ldots h_{40}\) zapis \(H(b)\) v 16-tiškem sistemu.
|
||||||
Datoteka, katere vsebina ima zgostitev \(H(b)\) enako
|
Datoteka, katere vsebina ima zgostitev \(H(b)\) enako
|
||||||
|
|
@ -178,8 +180,20 @@ in njihovih prejšnjih različic. A kako ohranimo informacijo o imenu
|
||||||
datotek in drevesni strukturi mape? Git za to ustvari nov tip objekta
|
datotek in drevesni strukturi mape? Git za to ustvari nov tip objekta
|
||||||
\emph{drevo} (angl. \emph{tree}), ki hrani preprost seznam imen datotek
|
\emph{drevo} (angl. \emph{tree}), ki hrani preprost seznam imen datotek
|
||||||
in naslovov na vsebino datotek v mapi. Naslov na vsebino datoteke \(b\)
|
in naslovov na vsebino datotek v mapi. Naslov na vsebino datoteke \(b\)
|
||||||
je seveda zgostitev vsebine \(H(b)\). Seznam imen datotek in zgostitev
|
je seveda zgostitev vsebine \(H(b)\).
|
||||||
je preprosta tekstovna datoteka, za katero lahko izračunamo zgostitev.
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
\begin{Verbatim}[frame=single]
|
||||||
|
100644 blob 33476f4951afc28d5ac2dc0d42d82f17ac817de2 bla.txt
|
||||||
|
100644 blob 2ce22b4dc77442103f095503f1205937c1b0fcfc blabla.txt
|
||||||
|
040000 tree ae247f2a35aadade5863aec2475cf13020304b06 podmapa
|
||||||
|
\end{Verbatim}
|
||||||
|
\caption{Vsebina mape v Gitu je preprost seznam datotek in podmap ter
|
||||||
|
zgostitev njihove vsebine. Številke na začetku določajo dovoljenja za datoteke
|
||||||
|
po sistemu Posix.}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Drevo preprost seznam v tekstovni datoteki, za katerega lahko prav tako izračunamo zgostitev.
|
||||||
Zgostitev datotečnega drevesa natanko določa tako imena datotek, kot
|
Zgostitev datotečnega drevesa natanko določa tako imena datotek, kot
|
||||||
tudi vsebino datotek, ki so vsebovane v mapi. Če se katerakoli datoteka
|
tudi vsebino datotek, ki so vsebovane v mapi. Če se katerakoli datoteka
|
||||||
ali ime datoteke v mapi spremeni, se bo spremnila tudi njena zgostitev
|
ali ime datoteke v mapi spremeni, se bo spremnila tudi njena zgostitev
|
||||||
|
|
@ -188,21 +202,10 @@ vsebuje tudi poddrevesa. Tako lahko rekurzivno ustvarimo drevesno
|
||||||
podatkovno strukturo, ki zajema mapo z datotekami in podmapami v
|
podatkovno strukturo, ki zajema mapo z datotekami in podmapami v
|
||||||
poljubni globini.
|
poljubni globini.
|
||||||
|
|
||||||
\begin{figure}
|
Poglejmo si primer. Denimo, da imamo v korenski mapi naslednje datoteke in
|
||||||
\centering
|
podmape.
|
||||||
\begin{Verbatim}[frame=single]
|
|
||||||
100644 blob 33476f4951afc28d5ac2dc0d42d82f17ac817de2 bla.txt
|
|
||||||
100644 blob 2ce22b4dc77442103f095503f1205937c1b0fcfc blabla.txt
|
|
||||||
040000 tree ae247f2a35aadade5863aec2475cf13020304b06 podmapa
|
|
||||||
\end{Verbatim}
|
|
||||||
\caption{Vsebina mape v Gitu je preprost seznam datotek in podmap ter
|
|
||||||
zgostitev njihove vsebine}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Poglejmo si primer. Denimo, da imamo v naslednjo strukturo datotek in
|
\begin{figure}[h]
|
||||||
podmap
|
|
||||||
|
|
||||||
\begin{figure}
|
|
||||||
\centering
|
\centering
|
||||||
\begin{Verbatim}[frame=single]
|
\begin{Verbatim}[frame=single]
|
||||||
├── bla.txt (vsebina: bla)
|
├── bla.txt (vsebina: bla)
|
||||||
|
|
@ -212,7 +215,7 @@ podmap
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
\caption{Struktura datotek in podmap, ki jo bomo hranili v Gitu.}
|
\caption{Struktura datotek in podmap, ki jo bomo hranili v Gitu.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
\pagebreak
|
|
||||||
Git bo shranil naslednje objekte v vsebinsko naslovljivo shrambo:
|
Git bo shranil naslednje objekte v vsebinsko naslovljivo shrambo:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|
@ -249,11 +252,12 @@ Z uporabo zgostitve kot kazalca na vsebino, Git vsebino mape postavi v
|
||||||
podatkovno strukturo, ki jo matematično lahko opišemo z \emph{usmerjenim
|
podatkovno strukturo, ki jo matematično lahko opišemo z \emph{usmerjenim
|
||||||
grafom}. Če je vsebina datotek enaka(npr. \texttt{bla.txt} in
|
grafom}. Če je vsebina datotek enaka(npr. \texttt{bla.txt} in
|
||||||
\texttt{mapa/bla.txt}), Git shrani le eno kopijo, ki je dostopna v
|
\texttt{mapa/bla.txt}), Git shrani le eno kopijo, ki je dostopna v
|
||||||
datoteki \linebreak\texttt{.git/objects/bc/c1382241e267cf790ca6b3afe9fde6dcf1072f}.
|
datoteki z imenom enakim zgostitvi vsebine.
|
||||||
Zato datotečno drevo v Gitu ni nujno predstavljeno kot drevo, ampak kot
|
Zato datotečno drevo v Gitu ni nujno predstavljeno kot drevo, ampak kot
|
||||||
\emph{usmerjen aciklični graf}.
|
\emph{usmerjen (aciklični) graf}\footnote{Teoretično bi lahko dosegli, da bi bili v grafu tudi cikli,
|
||||||
|
a je to zelo malo verjetno in zato to možnost ignoriramo.}.
|
||||||
|
|
||||||
\begin{figure}
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.6\linewidth]{slike/file-graph.pdf}
|
\includegraphics[width=0.6\linewidth]{slike/file-graph.pdf}
|
||||||
\caption{Primer datotečnega grafa povezanega z zgostitvami. Zaradi
|
\caption{Primer datotečnega grafa povezanega z zgostitvami. Zaradi
|
||||||
|
|
@ -266,22 +270,22 @@ zgostitev spremenjene vsebine in sprememba bo splavala na površje do
|
||||||
zgostitve za korensko mapo. Zgostitev služi tako kot identifikator
|
zgostitve za korensko mapo. Zgostitev služi tako kot identifikator
|
||||||
vsebine, kot tudi kot kontrolna vsota, ki omogoča detekcijo sprememb.
|
vsebine, kot tudi kot kontrolna vsota, ki omogoča detekcijo sprememb.
|
||||||
|
|
||||||
Opomba\\
|
\begin{opomba}
|
||||||
Podatkovna struktura objektov v Gitu je podobna Merklejevim drevesom.
|
Podatkovna struktura objektov v Gitu je podobna Merklejevim drevesom.
|
||||||
Razlika je v tem, da Gita hrani le eno kopijo datotek z identično
|
Razlika je v tem, da Gita hrani le eno kopijo datotek z identično
|
||||||
vsebino, zato dobimo usmerjen aciklični graf in ne drevesa. Postopek je
|
vsebino, zato dobimo usmerjen aciklični graf in ne drevesa. Postopek graditve
|
||||||
podoben veriženju blokov, ki se uporablja v kriptovalutah.
|
datotečnega drevesa v Gitu je soroden veriženju blokov, ki se uporablja v
|
||||||
|
kriptovalutah.
|
||||||
|
\end{opomba}
|
||||||
|
|
||||||
Opomba\\
|
Ponovimo, kar smo spoznali o Gitu. Git hrani vsebino datotek in datotečno strukturo
|
||||||
Dostop do objekta je mogoč, če poznamo \textbf{zgostitev} njegove
|
v \emph{vsebinsko naslovljivi shrambi} (v mapi \texttt{.git/objects}).
|
||||||
vsebine. To pomeni, da je referenca na posamezen objekt v Gitu preprosto
|
To pomeni, da je referenca na posamezen objekt v Gitu preprosto zgostitev njegove vsebine
|
||||||
zgostitev(angl. hash) vsebine tega objekta. Po drugi strani je vsebina
|
in da lahko do določene vsebine dostopamo le, če poznamo njeno zgostitev. Po drugi strani
|
||||||
objekta določena z njegovo zgostitvijo. To pomeni, da lahko enostavno
|
je vsebina za vse praktične primere določena s svojo zgostitvijo. Tako lahko enostavno
|
||||||
preverimo verodostojnost vsebine, ki je shranjena v Gitu. Git hrani
|
preverimo verodostojnost vsebine, ki je shranjena v Gitu.
|
||||||
skladišče objektov v mapi \texttt{.git/objects}.
|
|
||||||
|
|
||||||
\section{Trki zgostitev in rojstnodnevni
|
\section{Trki zgostitev in rojstnodnevni paradoks}\label{sec_trk}
|
||||||
paradoks}\label{sec_trk}
|
|
||||||
|
|
||||||
Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Če imata
|
Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Če imata
|
||||||
dve datoteki z različno vsebino isto zgostitev, Git shrani le eno
|
dve datoteki z različno vsebino isto zgostitev, Git shrani le eno
|
||||||
|
|
@ -299,16 +303,26 @@ tako da je vsaka izbira enakomerno porazdeljena. Kolikšna je verjetnost
|
||||||
\(p(n,h)\), da bosta vsaj dve števili enaki? Verjetnost \(p(n,h)\)
|
\(p(n,h)\), da bosta vsaj dve števili enaki? Verjetnost \(p(n,h)\)
|
||||||
izračunamo elementarno z verjetnostjo nasprotnega dogodka:
|
izračunamo elementarno z verjetnostjo nasprotnega dogodka:
|
||||||
|
|
||||||
\[1 - p(n,h) = \frac{h \cdot (h - 1)\cdots(h - n + 1)}{h^{n}} = \prod_{k = 1}^{n - 1}\left( 1 - \frac{k}{h} \right).\]
|
\[1 - p(n,h) = \frac{h \cdot (h - 1)\cdots(h - n + 1)}{h^{n}} =
|
||||||
|
\prod_{k = 1}^{n - 1}\left( 1 - \frac{k}{h} \right).\]
|
||||||
|
|
||||||
Če izraz logaritmiramo, dobimo
|
Če izraz logaritmiramo, dobimo
|
||||||
\[\log(1 - p(n,h)) = \sum_{k = 1}^{n - 1}\log(1 - \frac{k}{h}) < - \sum_{k = 1}^{n - 1}\frac{k}{h} = \frac{- \left( n(n - 1) \right)}{2h}.\]\protect\phantomsection\label{eq_log_ocena}{}
|
\begin{eqnarray}
|
||||||
|
\log(1 - p(n,h)) = \sum_{k = 1}^{n - 1}\log(1 - \frac{k}{h}) <
|
||||||
|
- \sum_{k = 1}^{n - 1}\frac{k}{h} = \frac{- \left( n(n - 1) \right)}{2h}.
|
||||||
|
\label{eq_log_ocena}
|
||||||
|
\end{eqnarray}
|
||||||
|
|
||||||
Res! Logaritem je konveksna funkcija, zato so vrednosti manjše od
|
Res! Logaritem je konveksna funkcija, zato so vrednosti manjše od
|
||||||
vrednosti na tangenti
|
vrednosti na tangenti
|
||||||
\(\log(1 - \frac{k}{h}) = \log(1 - x) < x = \frac{k}{h}\).
|
\(\log(1 - \frac{k}{h}) = \log(1 - x) < x = \frac{k}{h}\).
|
||||||
|
|
||||||
Od tod izpeljemo oceno za \(p(n,h)\)
|
Od tod izpeljemo oceno za \(p(n,h)\)
|
||||||
\[p(n,h) > 1 - e^{\frac{- \left( n(n - 1) \right)}{2h}} \approx 1 - e^{- \frac{n^{2}}{2h}}.\]\protect\phantomsection\label{eq_ocena}{}
|
\begin{eqnarray}
|
||||||
|
p(n,h) > 1 - e^{\frac{-\left( n(n - 1) \right)}{2h}} \approx 1 - e^{-\frac{n^{2}}{2h}}.
|
||||||
|
\label{eq_ocena}
|
||||||
|
\end{eqnarray}
|
||||||
|
|
||||||
Za vrednosti \(1 \ll n \ll h\) je \(1 - e^{- \frac{n^{2}}{2h}}\) tudi
|
Za vrednosti \(1 \ll n \ll h\) je \(1 - e^{- \frac{n^{2}}{2h}}\) tudi
|
||||||
dobra aproksimacija za \(p(n,h)\).
|
dobra aproksimacija za \(p(n,h)\).
|
||||||
|
|
||||||
|
|
@ -317,8 +331,7 @@ trka, moramo rešiti obratno nalogo: največ koliko števil \(n(p,d)\)
|
||||||
lahko izberemo, da bo verjetnost pojava dveh enakih števil manjša od
|
lahko izberemo, da bo verjetnost pojava dveh enakih števil manjša od
|
||||||
\(p \in \lbrack 0,1\rbrack\)? Natančen odgovor na to vprašanje ni tako
|
\(p \in \lbrack 0,1\rbrack\)? Natančen odgovor na to vprašanje ni tako
|
||||||
preprost \cite{brink_probably_2012}. Lahko pa uporabimo oceno
|
preprost \cite{brink_probably_2012}. Lahko pa uporabimo oceno
|
||||||
(\hyperref[eq_ocena]{{[}eq\_ocena{]}}) in čez palec ocenimo vrednost
|
(\ref{eq_ocena}) in čez palec ocenimo vrednost \(n(p,h)\):
|
||||||
\(n(p,h)\):
|
|
||||||
|
|
||||||
\[\begin{array}{r}
|
\[\begin{array}{r}
|
||||||
- n^{2} \approx \log(1 - p) \Rightarrow \\
|
- n^{2} \approx \log(1 - p) \Rightarrow \\
|
||||||
|
|
@ -343,12 +356,12 @@ podatkovne strukture.
|
||||||
|
|
||||||
\section{Posnetki stanja}
|
\section{Posnetki stanja}
|
||||||
|
|
||||||
Osnovna enota v Gitu je \textbf{vnos} (angl. \textbf{commit}). Vnos je
|
Osnovna enota v Gitu je \emph{vnos} (angl. \emph{commit}). Vnos je
|
||||||
posnetek stanja zabeleženih datotek v trenutku, ko je bil ustvarjen.
|
posnetek stanja zabeleženih datotek v trenutku, ko je bil ustvarjen.
|
||||||
Poleg vsebine datotek vsak vnos vsebuje še metapodatke o avtorju, datumu
|
Poleg vsebine datotek vsak vnos vsebuje še metapodatke o avtorju, datumu
|
||||||
vnosa in opisom sprememb. Podobno kot objekt tipa \emph{drevo}, je tudi
|
vnosa in opisom sprememb. Podobno kot objekt tipa \emph{drevo}, je tudi
|
||||||
vnos objekt v vsebinsko naslovljivi shrambi, ki ima določeno
|
vnos objekt v vsebinsko naslovljivi shrambi in ima določeno
|
||||||
\textbf{zgostitev vnosa}. Zgostitev vnosa je natanko določena z vsebino
|
\emph{zgostitev vnosa}. Zgostitev vnosa je natanko določena z vsebino
|
||||||
shranjenih datotek in metapodatkov vnosa.
|
shranjenih datotek in metapodatkov vnosa.
|
||||||
|
|
||||||
\begin{table}
|
\begin{table}
|
||||||
|
|
@ -437,15 +450,13 @@ premakne naprej, značka \protect\texttt{v-1.0} pa ostane tam, kjer je
|
||||||
bila.}
|
bila.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Opomba\\
|
|
||||||
Veje in značke nimajo v Gitu nobenega posebnega pomena, razen tega, da
|
Veje in značke nimajo v Gitu nobenega posebnega pomena, razen tega, da
|
||||||
so reference na vnose. Pomen posamenznih vej je stvar dogovora med
|
so reference na vnose. Pomen posamenznih vej je stvar dogovora med
|
||||||
uporabniki. Tako se pogosto uporablja različne veje za različne namene:
|
uporabniki. Tako se pogosto uporablja različne veje za različne namene:
|
||||||
\texttt{main} ali \texttt{master} je navadno glavna veja razvoja, veje z
|
\texttt{main} ali \texttt{master} je navadno glavna veja razvoja, veje z
|
||||||
imeni \texttt{stable}, \texttt{production}, \texttt{development} in
|
imeni \texttt{stable}, \texttt{production}, \texttt{development} in
|
||||||
podobno označujejo različne stopnje razvoja programske opreme, veje s
|
podobno označujejo različne stopnje razvoja programske opreme, veje s
|
||||||
predpono \texttt{feature-} označujejo razvoj novih funkcionalnosti.
|
predpono \texttt{feature-*} označujejo razvoj novih funkcionalnosti.
|
||||||
|
|
||||||
Vse te pomene damo vejam ljudje, ki sodelujemo v nekem Git repozitoriju.
|
Vse te pomene damo vejam ljudje, ki sodelujemo v nekem Git repozitoriju.
|
||||||
Za Git so vse veje in značke zgolj preprosti kazalci na določen vnos.
|
Za Git so vse veje in značke zgolj preprosti kazalci na določen vnos.
|
||||||
|
|
||||||
|
|
@ -474,7 +485,7 @@ sta:
|
||||||
posnetek stanja datotek ter metapodatke (avtor, čas, sporočilo).
|
posnetek stanja datotek ter metapodatke (avtor, čas, sporočilo).
|
||||||
\item
|
\item
|
||||||
\textbf{zgostitev vnosa} (angl. \textbf{commit hash}) je 40-mestna
|
\textbf{zgostitev vnosa} (angl. \textbf{commit hash}) je 40-mestna
|
||||||
heksadecimalna vrednost, izračunana s SHA-1, ki enolično identificira
|
heksadecimalna vrednost, izračunana s SHA1, ki enolično identificira
|
||||||
vnos na podlagi vsebine posnetka in metapodatkov.
|
vnos na podlagi vsebine posnetka in metapodatkov.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
@ -512,7 +523,6 @@ Omenimo še dva pojma, ki jih uporabljamo pri delu z Gitom:
|
||||||
katerim lahko izmenjujemo vsebino.
|
katerim lahko izmenjujemo vsebino.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Opomba\\
|
|
||||||
Gitov podatkovni model omogoča, da je večina operacij v Gitu obrnljivih.
|
Gitov podatkovni model omogoča, da je večina operacij v Gitu obrnljivih.
|
||||||
To pomeni, da lahko repozitorij povrnemo v prejšnje stanje. Običajne
|
To pomeni, da lahko repozitorij povrnemo v prejšnje stanje. Običajne
|
||||||
operacije le dodajajo nove vnose in starih ne brišejo. Prav tako se v
|
operacije le dodajajo nove vnose in starih ne brišejo. Prav tako se v
|
||||||
|
|
@ -532,8 +542,6 @@ Ko smo opremljeni z razumevanjem podatkovnega modela Gita, razložimo kaj
|
||||||
pomenijo posamezne operacije, ki jih Git omogoča. Ukazov ne bom
|
pomenijo posamezne operacije, ki jih Git omogoča. Ukazov ne bom
|
||||||
prevajal, ampak jih bom navedel kot jih pozna program \texttt{git}.
|
prevajal, ampak jih bom navedel kot jih pozna program \texttt{git}.
|
||||||
|
|
||||||
\section{Checkout}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -541,13 +549,11 @@ git checkout referenca
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
spremeni datoteke v delovni kopiji tako, da se ujemajo z vnosom, na
|
spremeni datoteke v delovni kopiji tako, da se ujemajo z vnosom, na
|
||||||
katerega kaže referenca. Poleg tega prestavi oznako \texttt{HEAD} na
|
katerega kaže \texttt{referenca}. Poleg tega prestavi oznako \texttt{HEAD} na
|
||||||
isti vnos. Če je referenca veja, jo nastavi, kot aktivno vejo. Če je
|
isti vnos. Če je referenca veja, jo nastavi, kot aktivno vejo. Če je
|
||||||
referenca oznaka ali zgostitev vnosa, priedmo v stanje brez aktivne veje
|
referenca oznaka ali zgostitev vnosa, priedmo v stanje brez aktivne veje
|
||||||
(angl. \emph{deteached HEAD}).
|
(angl. \emph{deteached HEAD}).
|
||||||
|
|
||||||
\section{Commit}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -559,8 +565,6 @@ index). V zgodovinskem grafu ustvari novo vozlišče, ki je povezano s
|
||||||
prejšnjim vnosom. Poleg tega prestavi aktivno vejo in oznako
|
prejšnjim vnosom. Poleg tega prestavi aktivno vejo in oznako
|
||||||
\texttt{HEAD} na novo ustvarjeni vnos.
|
\texttt{HEAD} na novo ustvarjeni vnos.
|
||||||
|
|
||||||
\section{Add}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -572,8 +576,6 @@ spreminja zgodovinskega grafa, pač pa doda novo vsebino in datotečna
|
||||||
drevesa, ki vsebujejo spremembe v shrambo objektov. Vsebina čakalnice bo
|
drevesa, ki vsebujejo spremembe v shrambo objektov. Vsebina čakalnice bo
|
||||||
zabeležena v naslednjem vnosu.
|
zabeležena v naslednjem vnosu.
|
||||||
|
|
||||||
\section{Pull}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -587,8 +589,6 @@ oddaljene, se lokalna veja enostavno prestavi, da kaže na isti vnos, kot
|
||||||
oddaljena veja. V nasprotnem primeru, mora uporabnik posredovati in
|
oddaljena veja. V nasprotnem primeru, mora uporabnik posredovati in
|
||||||
razrešiti morebitne konflikte.
|
razrešiti morebitne konflikte.
|
||||||
|
|
||||||
\section{Push}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -599,8 +599,6 @@ potisne novo vsebino na oddaljeni repozitorij. Push deluje obratno kot
|
||||||
\texttt{pull}. Ukaz je uspešno izveden le, če je oddaljena veja prednica
|
\texttt{pull}. Ukaz je uspešno izveden le, če je oddaljena veja prednica
|
||||||
lokalne veje in ni konflikotov.
|
lokalne veje in ni konflikotov.
|
||||||
|
|
||||||
\section{Fetch}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -612,19 +610,16 @@ Pri tem ne more priti do konfliktov, ker git preprosto doda nove objekte
|
||||||
v shrambo in obstoječih objektov nikakor ne spreminja. Oddaljenim vejam
|
v shrambo in obstoječih objektov nikakor ne spreminja. Oddaljenim vejam
|
||||||
in oznakam preprosto doda predpono z imenom oddaljenega repozitorija.
|
in oznakam preprosto doda predpono z imenom oddaljenega repozitorija.
|
||||||
|
|
||||||
\section{Reset}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
git reset referenca
|
git reset referenca
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
spremeni kam kaže trenutno izbrana veja. Ukaz ne spremeni zgodovinskega
|
spremeni kam kaže trenutno izbrana veja. Trenutno izbrano vejo prestavi na isti vnos, na
|
||||||
|
katerega kaže dana \texttt{referenca}. Ukaz ne spremeni zgodovinskega
|
||||||
drevesa, ampak le to, na kateri vnos kaže trenutno izbrana veja.
|
drevesa, ampak le to, na kateri vnos kaže trenutno izbrana veja.
|
||||||
|
|
||||||
\section{Merge}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -636,8 +631,6 @@ referenco). Nov vnos ima dva starša: vnos na katerega kaže trenutna veja
|
||||||
in vnos, na katerega kaže referenca. Če pride do konfliktov, jih mora
|
in vnos, na katerega kaže referenca. Če pride do konfliktov, jih mora
|
||||||
uporabnik sam razrešiti, preden se ustvari nov vnos.
|
uporabnik sam razrešiti, preden se ustvari nov vnos.
|
||||||
|
|
||||||
\section{Rebase}
|
|
||||||
|
|
||||||
Ukaz
|
Ukaz
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
@ -651,16 +644,16 @@ nove vnose in prestavljajo reference. Zato je večina ukazov v Gitu
|
||||||
varna, v smislu, da jih lahko kasneje prekličemo in pridemo nazaj na
|
varna, v smislu, da jih lahko kasneje prekličemo in pridemo nazaj na
|
||||||
prejšnje stanje. Ukaz \texttt{rebase} pa spremeni zgodovino in ga ne
|
prejšnje stanje. Ukaz \texttt{rebase} pa spremeni zgodovino in ga ne
|
||||||
moremo preklicati, saj trenutne vnose nadomesti z novimi in stare vnose
|
moremo preklicati, saj trenutne vnose nadomesti z novimi in stare vnose
|
||||||
pobriše\footnote{Obstaja enostaven način, da tudi \texttt{rebase} lahko
|
pobriše\footnote{Obstaja enostaven način, kako \texttt{rebase} izvedemo tako, da ga lahko
|
||||||
prekličemo. Na zadnji vnos, ki ga želimo prestaviti preprosto
|
kasneje prekličemo. Na vnos, ki ga želimo prestaviti z \texttt{rebase}, preprosto
|
||||||
postavimo novo referenco(vejo ali oznako). To povzroči, da se stari
|
postavimo novo vejo ali oznako. To povzroči, da se stari
|
||||||
vnosi ne pobrišejo tudi, ko se izvede ukaz \texttt{rebase}.}.
|
vnosi ne pobrišejo, ko se izvede ukaz \texttt{rebase}.}.
|
||||||
|
|
||||||
\section{Zaključek}
|
\section{Zaključek}
|
||||||
|
|
||||||
Spoznali smo, kako deluje Git in s katere matematičnime pojme uporablja
|
Spoznali smo, kako deluje Git in s katerimi matematičnimi pojmi lahko opišemo njegov podatkovni model.
|
||||||
za model. Opis dela z Gitom presega namen tega dokumenta, zato vas raje
|
Upam, da boste s tem znanjem bolj samozavestno uporabljali Git. Opis dela z Gitom presega namen tega
|
||||||
usmerim na uradno dokumentacijo:
|
dokumenta, zato vas raje usmerim na uradno dokumentacijo:
|
||||||
|
|
||||||
{\url{https://git-scm.com/cheat-sheet}}
|
{\url{https://git-scm.com/cheat-sheet}}
|
||||||
|
|
||||||
|
|
@ -669,7 +662,7 @@ Pri pisanju tega članka sem sevada uporabljal Git. V
|
||||||
repozitoriju} \cite{vuk_git-intro_nodate} si lahko ogledate celotno
|
repozitoriju} \cite{vuk_git-intro_nodate} si lahko ogledate celotno
|
||||||
zgodovino nastajanja tega članka.
|
zgodovino nastajanja tega članka.
|
||||||
|
|
||||||
Pri pripravi dokumenta sem uporabil Gemini 3. Vse odgovore sem preveril
|
Pri pripravi dokumenta sem uporabil Gemini 3, a sem vse odgovore njegove odgovore skrbno preveril
|
||||||
in uredil po svoje.
|
in uredil po svoje.
|
||||||
|
|
||||||
\bibliographystyle{plainurl}
|
\bibliographystyle{plainurl}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue