-
Notifications
You must be signed in to change notification settings - Fork 30
/
git-init.tex
executable file
·125 lines (82 loc) · 6.36 KB
/
git-init.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
\chapter*{Instalacija, konfiguracija i prvi projekt}
\addcontentsline{toc}{chapter}{Instalacija, konfiguracija i prvi projekt}
\section*{Instalacija}
\addcontentsline{toc}{section}{Instalacija}
Instalacija gita je relativno jednostavna. Ako ste na nekom od linuxoidnih operacijskih sustava sigurno postoji paket za instalaciju.
Za sve ostale, postoje jednostavne instalacije, a sve su poveznice dostupne na službenim web stranicama\footnote{http://git-scm.com/download}.
Važno je napomenuti da su to samo \textbf{osnovni paketi}.
Oni će biti dovoljni za primjere koji slijede, no za mnoge specifične scenarije postoje dodaci s kojima se git naredbe "obogaćuju" novima.
\section*{Prvi git repozitorij}
\addcontentsline{toc}{section}{Prvi git repozitorij}
Ako ste naviknuti na TFS, subversion ili CVS onda si vjerojatno zamišljate da je za ovaj korak potrebno neko računalo na kojem je instaliran poseban servis (\emph{daemon}) i kojemu je potrebno dati do znanja da želite imati novi repozitorij na njemu.
Vjerojatno mislite i to da je sljedeći korak preuzeti taj projekt s tog udaljenog računala/servisa.
Neki sustavi taj korak nazivaju \emph{checkout}, neki \emph{import}, a u gitu je to \emph{clone} iliti kloniranje projekta.
S gitom je jednostavnije.
\textbf{Apsolutno svaki direktorij može postati git repozitorij.}
Ne mora \emph{uopće} postojati udaljeni server i neki centralni repozitorij kojeg koriste (i) ostali koji rade na projektu.
Ako vam je to neobično, onda se spremite, jer stvar je još čudnija: ako već postoji udaljeni repozitorij s kojeg preuzimate izmjene od drugih programera on ne mora biti jedan jedini.
\textbf{Mogu postojati deseci takvih udaljenih repozitorija}, sami ćete odlučiti na koje ćete "slati" svoje izmjene i s kojih preuzimati izmjene.
I vlasnici tih udaljenih repozitorija imaju istu slobodu kao i vi, mogu sami odlučiti čije će izmjene preuzimati kod sebe i kome slati svoje izmjene.
Pomisliti ćete da je rezultat anarhija u kojoj se ne zna tko pije, tko plače, a tko plaća.
Nije tako.
Stvari, uglavnom, funkcioniraju bez većih problema.
Idemo sad na prvi i najjednostavniji korak: stvoriti ćemo novi direktorij \\ \verb+moj-prvi-projekt+ i stvoriti novi repozitorij u njemu:
\input{git_output/git_init}
I to je to.
Ako idete pogledati kakva se to čarolija desila s tim \verb+git init+, otkriti ćete da je stvoren direktorij \verb+.git+.
U principu cijela povijest, sve grane, čvorovi i komentari, apsolutno sve vezano uz repozitorij čuva se u tom direktoriju.
Zatreba li nam ikad sigurnosna kopija cijelog repozitorija, sve što treba napraviti je da sve lokalne promjene spremimo (\emph{commit}amo) u git i spremimo negdje arhivu (\verb+.zip+, \verb+.bz2+, \dots) s tim \verb+.git+ direktorijem.
\section*{Git naredbe}
\addcontentsline{toc}{section}{Git naredbe}
U prethodnom smo primjeru u našem direktoriju inicijalizirali git repozitorij naredbom \verb+git init+.
Općenito, git naredbe uvijek imaju sljedeći format:
\gitoutput{
\color{blue}{git $<$naredba$>$ $<$opcija1$>$ $<$opcija2$>$ \dots}
}
Izuzetak je pomoćni grafički program kojim se može pregledavati povijest projekta, a koji dolazi u instalaciji s gitom, \verb+gitk+.
Za svaku git naredbu možemo dobiti \emph{help} s:
\gitoutputcommand{
git help $<$naredba$>$
}
Na primjer, \verb+git help init+ ili \verb+git help config+.
\section*{Osnovna konfiguracija}
\addcontentsline{toc}{section}{Osnovna konfiguracija}
Nekoliko postavki je poželjno konfigurirati da bismo nastavili normalan rad.
Sva git konfiguracija se postavlja pomoću naredbe \verb+git config+.
Postavke mogu biti \textbf{lokalne} (odnosno vezane uz jedan jedini projekt) ili \textbf{globalne} (vezane uz korisnika na računalu).
Globalne postavke se postavljaju s:
\gitoutputcommand{git config --global $<$naziv$>$ $<$vrijednost$>$}
\dots{}i one se spremaju u datoteku \verb+.gitconfig+ u vašem \emph{home} direktoriju.
Lokalne postavke se spremaju u \verb+.git+ direktorij u direktoriju koji sadrži vaš repozitorij, a tada je format naredbe \verb+git config+:
\gitoutputcommand{git config $<$naziv$>$ $<$vrijednost$>$}
Za normalan rad na nekom projektu, drugi korisnici trebaju znati tko je točno radio koje izmjene na kodu (\emph{commit}ove).
Zato trebamo postaviti ime i email adresu koja će u povijesti projekta biti "zapamćena" uz svaku našu spremljenu izmjenu:
\input{git_output/git_config_1}
Imamo li neki repozitorij koji je vezan za posao i možda se ne želimo identificirati sa svojom privatnom domenom, tada \emph{u tom direktoriju} trebamo postaviti drukčije postavke:
\input{git_output/git_config_2}
Na taj će se način \emph{email} adresa \[email protected]+ spominjati samo u povijesti tog projekta.
Postoje mnoge druge konfiguracijske postavke, no ja vam preporučam da za početak postavite barem dvije \verb+color.ui+ i \verb+merge.tool+.
S \verb+color.ui+ možete postaviti da ispis git naredbi bude obojan:
\input{git_output/git_config_3}
\verb+merge.tool+ određuje koji će se program koristiti u slučaju \textbf{konflikta} (o tome više kasnije). Ja koristim \verb+gvimdiff+:
\input{git_output/git_config_4}
\section*{.gitignore}
\addcontentsline{toc}{section}{.gitignore}
Prije ili kasnije dogodit će se situacija da u direktoriju s repozitorijem imamo datoteke koje ne želimo spremati u povijest projekta.
To su, na primjer, konfiguracijske datoteke za različite editore ili datoteke koje nastaju kompajliranjem (\verb+.class+ za javu, \verb+.pyc+ za python, \verb+.o+ za C, i sl.).
U tom slučaju trebamo nekako gitu dati do znanja da takve datoteke ne treba nikad snimati.
Otvorite novu datoteku naziva \verb+.gitignore+ u glavnom direktoriju projekta (ne nekom od poddirektorija) i jednostavno unesite sve ono što ne treba biti dio povijesti projekta.
Ako ne želimo \verb+.class+, \verb+.swo+, \verb+.swp+ datoteke i sve ono što se nalazi u direktoriju \verb+target/+ , naša će \verb+.gitignore+ datoteka izgledati ovako:
\gitoutputcommand{%
\color{gray}{\# Vim privremene datoteke:}\\
\color{black}{*.swp}\\
\color{black}{*.swo}\\
\color{gray}{\# Java kompajlirane klase:}\\
\color{black}{*.class}\\
\color{gray}{\# Output direktorij s rezultatima kompajliranja i builda:}\\
\color{black}{target/*}%
}
Linije koje započinju znakom \verb+#+ su komentari i git će se ponašati kao da ne postoje.
Sad smo spremni početi raditi s našim projektom\dots
%\section*{}
%\addcontentsline{toc}{section}{}