Naj te danes napotim k neverjetno uporabnemu orodju modernega razvijalca programja.
Uvodnik z malo zgodovine
Ampak pred pa leti je popizdil The Linus!
Ja, taisti midel, ki je izumil Linux in ki se je dnevno zgražal nad grozljivim delom, ki ga je opravljal. In sicer gre za managing kode za Linux!
Si lahko predstavljaš vso kramo, ki jo ta model dnevo poriva v Linuxov repozitorij!
In ko model za nameček naleti na licenčne omejitve source control sistema, ki ga je takrat uporabljal je bila jeba popolna!
Tip popizdi in se dela loti sam, In v 14 dneh rukne ven eno začetno verzijo SCM-ja z imenom Git!
Iskaže pa se fa je zadeva tok ql in tok hitra in univerzalna, da jo kmalu posvojijo tudi druge veje open source communitya.
Npr. Ruby folk! In ker zadnje čase Ruby kle gonmo je edino prav da tudi git posvojimo.
Enouporabniško delo z Git (brez badaljnih nakladanj)
Install the damn fence (i mean git)
Prvi koraki…ali post inštalacija
$ git config --global user.name "Slovenec Brezkurcni"
$ git config --global user.email slovenec@brezkurcni.si
Zgornjo zadevo naklofaš v prompt samo enkrat, saj se zadeva (glej –global oznako) zapiše v tvoj user profil, nekje v .gitconfig dir.
git config --list
Ven bo vrgu neki podobnega kot:
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=
Slovenec Brezkurcni
user.email=
slovenec@brezkurcni.si
merge.tool=kdiff3
mergetool.kdiff3.path=C:/Program Files/KDiff3/kdiff3.exe
diff.guitool=kdiff3
difftool.kdiff3.path=C:/Program Files/KDiff3/kdiff3.exe
difftool.kdiff3.cmd="C:/Program Files/KDiff3/kdiff3.exe" "$LOCAL" "$REMOTE"
core.editor="C:/Program Files/GitExtensions/GitExtensions.exe" fileeditor
core.autocrlf=true
Seveda bo zadeva samo podobna. Zgornji izpis je bil izveden na kompu, ki ima zraven poinštaliran še
git extrension. Če ga hočeš ga maš kle, kjer si lahko kaj več o paketutudi prebereš.
Let’s init my …
Ok. Napredek! (če ti git ne dela c command promptu bi znalo bit dobr znova zagnat winse. Kaj češ, tehnologija prejšnjega tisočletja pač. Hehe. hehe. muahahhaha)
Do that:1)
Start->All programs->Git->Git Bash
Evo ti slike:
2) Spizdi v mapo, katere vsebino (in struktoro) hočeš soravit pod verssion control (se sliš kot da ga daješ u jarem avtoritarne družbe). In ne pozabit da je bash, linux-like in ne windows-like (glej spodaj napako namesto / ):
Hoornet@HOORNET-PC ~
$ cd D:GitHubFilesBLOG
sh.exe”: cd: D:GitHubFilesBLOG: No such file or directory
Hoornet@HOORNET-PC ~
$ cd D:/GitHubFiles/BLOG
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG
$
Ok. Torej recimo da sem v željeni mapi. Čist vseen je, ali je mapa prazna alin pa že ima vsebino. Ko namreč začenemo komando:
$ git init
Initialized empty Git repository in d:/GitHubFiles/BLOG/.git/
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$
smo omenjeno mapo in vse podmape z vsebino vred postavili v source control. Seveda lahko ignoriramo določene mapi, fajle ali tipe fajlov ampak o tem (morda?) drugič.
Če sedaj damo pregledat kaj vse je v mapi, bomo videli, da je git dodal novo mapo z imenom:
.git
V tej mapi IN SAMO V TEJ MAPI je vse kar se tiče vaše pravkar init-ane mape in njene vsebine (dejmo zej temu pravt kar samo mapa. Nanaša se na vse podmape in svo vsebino v njih). Git nima svoje mape v vsakem poddirekltoruiju kot ste navajeni ustrahovani SVN-jevci. Totalni zakon, kadar hgočete skopširat vse kar mate v mapi brez gitovega dela!!!
Pa dejmo prevrit kva je sedaj not v mojem primeru.
3) Do this:
$ ls -a
. .. .git Git_time
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$
Kot vidiš je poleg moje podmape git_time noter še en dir z imenom .git
Še nekaj! Skoraj vse to lahko počnete v običajnem win promptu ampak ne boste videli sprotne informacije kot je:
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$
In to: IN COLOR!!!! Že v letu 2013 e.v.!
4) Git vsebuje komando status, ki nam vedno poda trnutno sliko. Do that:
$ git status
in boš dobil izpoved:
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use “git add” to track)
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$
Kot nam da sam git vedeti trenutno še ne sledimo ničemur. Dejmo nardit en ruby file s katerim se lahko potem igramo:
Za primer sem izbral en file (kontroller) iz Rails applikacije.
5) Torej dodajmo file v sledilnik (za drugačen prikaz bom sedaj uporabljal običajni Win command prompt). Najprej status potem dodajmo, rubijev file in nato še nkrat preverimo status:
D:GitHubFilesBLOG>git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use “git add <file>…” to include in what will be committed)
#
# Git_time/
nothing added to commit but untracked files present (use “git add” to track)D:GitHubFilesBLOG>git add .
D:GitHubFilesBLOG>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use “git rm –cached <file>…” to unstage)
#
# new file: Git_time/movies_controller.rb
#D:GitHubFilesBLOG>
Štekaš?
Sedaj mam now file noter namenjen sledenju, toda da zapišem trenutno stanje moram storiti še nekaj: Commit s komentarjem spremembe.
6) Do this:
D:GitHubFilesBLOG>git commit -m”začetni commit”
[master (root-commit) 53192ac] začetni commit
1 file changed, 60 insertions(+)
create mode 100644 Git_time/movies_controller.rbD:GitHubFilesBLOG>
Če sedaj poizvem po statusu sledenih datotek dobim sledeč rezultat:
D:GitHubFilesBLOG>git status
# On branch master
nothing to commit, working directory cleanD:GitHubFilesBLOG>
Vse datoteke so torej shranjene v trenutnem stanju. Dajmo sedaj spremenit datoteko tako, da bom pobrisal 3 metode v fajlu:
Preverimo sedaj status, da vidimo, če je git poštekal da sem premenil fajl:
D:GitHubFilesBLOG>git status
# On branch master
# Changes not staged for commit:
# (use “git add <file>…” to update what will be committed)
# (use “git checkout — <file>…” to discard changes in working directory)
#
# modified: Git_time/movies_controller.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)
Aha! Git je zaznal spremembo. Recimo da smo sedaj vmes programirali in da je sedaj ta datoteka končana. Torej je čas za nov commit. Postopek, ki ga nato ponavljam ob vsaki spremmbi, ki jo ohčem zapisati je:
D:GitHubFilesBLOG>git add .
D:GitHubFilesBLOG>git commit -m”odstranil odvečne metode”
[master f6f5754] odstranil odvečne metode
1 file changed, 21 insertions(+), 60 deletions(-)
rewrite Git_time/movies_controller.rb (82%)D:GitHubFilesBLOG>
Na tak način imam zapisane vse verzije vseh fajlov in map.
O tem kako do dolečene verzije pa (morda) prihodnjič.
Za zdaj lahko rečem samo to:
Switch to git!
C ya!