GIT
Toores. Ehk seda pala võib täiendada.
Sisukord
Sissejuhatus
GIT on vabavaraline versioonihaldustrakvara, mis loodi algselt Linus Torvaldsi poolt Linuxi kerneli arenduse tarbeks.
giti eelis on eelkõige hierarhiline arendus, näiteks linuxi kernel kus siis erineva tasemega üle maailma kommitivad ja siis kõvemad vaatavad nõrgemate koodi üle ja nii liiguvad patchid järjest ülespoole välja kuni lõpuks jõuavad järgmisse linuxi versiooni. Seega on ta sobilikum suurte opensource projektide jaoks kus erinevad commit levelid. Väikestes asutustes kus peamiselt lisatakse trunci tasuks kaaluda pigem subversioni kasutamist.
GITi omadused
- Jagatud versioonihaldus
- Revisioon – SHA1 kontrollsumma
- Snapshotid, mitte Erinevused
- .git kaust - täielik ajalugu
- Kõik tegevused kohalikud (peaaegu)
- Olemas diktaatorid ja leitlandid kes kinnitavad muudatusi
Enne paigaldamist tasub selgeks teha, et on olemas 8 erinevat võimalust kitiga enda repositooriumu jagamiseks. Täspemalt neist juttu lingil: http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository/
Antud näites kasutame SSH git-shell meetodit. Äraseletatult tähendab see seda, et süsteemi luuakse SSH kasutaja kelle kestaks (shell) on GITi enda shell mis toetab ainult giti käskusid.
Üritades seal mingeid tavalisi kestakäske käivitada teatatakse vastuseks:
fatal: What do you think I am? A shell?
Paigaldamine
FreeBSD asub git portsudes devel/git
# /usr/ports/devel/git && make install clean
Süsteemi tuleb tekitada git nimeline kasutaja mille shelliks /usr/local/libexec/git-core/git-shell
Debianis tuleb paigaldada git-core pakett
# apt-get install git-core
Gentoos
# emerge --ask --verbose dev-vcs/git
Repode tekitamine ja kasutamine
Uue repo saamiseks
$ cd /srv/git/base $ git init --bare --shared tarkvara.git
Mille tulemusel tekib
git@git.zoo.tartu.ee:base/tarkvara.git
Võtmete tegemine, masinas kus soovime kasutada giti anname käsu
$ ssh-keygen -t dsa
See tekitab kasutaja .ssh kausta kaks faili id_dsa privaatse ja id_dsa.pub avaliku võtme
Ligipääsemiseks tuleb kopeerida id_dsa.pub masinasse kus töötab nn git server, logida sinna serverisse ja lisama oma avaliku võtme git kasutajale:
# cat id_dsa.pub >> /srv/git/.ssh/authorized_keys
Seejärel tuleb tagasi logida enda klientmasinasse ja tõmmata repo alla:
$ git remote add origin git@git.zoo.tartu.ee:base/tarkvara.git
Ja lükata oma muudatused üles:
$ git push origin master
Kuskilt teisest kohast kasutama hakkamiseks
$ git clone git@git.zoo.tartu.ee:base/tarkvara.git
Tehtud muudatused committida ja siis pushida keskserverisse:
$ git add fail1 fail2 fail3 $ git commit -m "kirjeldus" $ git push origin master
Lihtsalt hilisemaks uuendamiseks sobib öelda
$ git pull
Ja muudatuste üleslükkamiseks
$ git commit -a $ git push
PS. Edaspidiseks - pushida ei ole vaja peale *igat* commitimist. Parem ongi pushida harvemini, sest juba pushitud asju on oluliselt raskem tagasi võtta ja see võib teistel miskit katki teha.
Rusikareegel: commitida tihti, pushida harvemini ja mis on pushitud, on jääv. Sellisel juhul tekib segadust vähem.
Pushitu tagasivõtmiseks on revert.
Probleemid
Kui keegi on origin/masterit juba muutnud, peale seda, kui sa viimati sealt tõmbasid, seega:
$ git pull origin master
Kui öeldakse pullimisel, et tekkis konflikt (st sina ja keegi teine on täpselt sama kohta muutnud), siis peaks git nimetama ka failid ja siis nendes failides on üks või mitu konflikti kohta, mis on markeeritud nii:
<<<<<< # Sinu kood ======== # Uus kood, mis tuli pullimis
Nüüd pead hoolega lugema ja vaatama, mis osa tuleb alles jätta ja mis kustutada või on hoopis mõistlik kombineerida kahest kokku.
Konfliktsed failid pead pärast parandamist uuesti addima ja committima.
Siis saad jälle pushida.
Üks äärmuslik võimalus on teha reset, näiteks
$ git reset --hard 9f6d568 HEAD is now at 9f6d568 Lock Savon to 0.7.9
Veel käske
Kohalikud tegevused
- git checkout bug23
Kaugtegevused
- git pull origin
- git push origin
GIT vs SVN
Harud - SVN
svn cp svn://svn.server.ee/projekt/trunk svn://svn.server.ee/projekt/branches/3.5 svn sw svn://svn.server.ee/projekt/ svn ci -m „muudatus 3.5-s“ svn sw svn://svn.server.ee/projekt/trunk svn merge -c 123 svn://svn.server.ee/projekt/ svn ci -m „r123 mergetud 3.5-st“
Harud - GIT
git co -b 3.5 git push origin 3.5 git ci -m „muudatus 3.5-s“ git co master git merge 3.5 git push origin
Graafilised liidesed
Kohe käsurealt on olemas parameeter tree
$ git log --graph --oneline --all
Lõik tulemist näeb välja järgnev:
* b2d805f eemaldatud ebavajalikke ridu * 0736f8e storage putitus ja tuuning * 13b7936 Merge RVM into master |\ | * bb79038 (origin/rvm) httpd.conf ja local.start parandused seoses RVM-iga | * 42a72c8 parandused seoses RVM-iga | * 3b7a380 bundleri muudatus RVM-i jaoks | * 1cc1a34 Merge branch 'master' of git.eenet.ee:base/haviserver | |\ | * | a05f46f uus Gemfile.lock * | | 1a0ac6d <C3>paar ietd bugi * | | 5a85cc0 pisut tuunitud storaget * | | 7a63e10 pisut kohendatud asju | |/ |/| * | b1e991b sodimine meediaserveriga
Mugavamaks kasutamiseks võib sellest tekitada lausa aliase, koos sobilike parameetritega
Selleks tuleb kodukataloogis lisad a.gitconfig faili
[alias] tree = log --graph --decorate --pretty=oneline --abbrev-commit
gitg is a fast GTK2 git repository browser for the GNOME desktop. It currently features:
* Loading large repositories very fast * Show/browse repository history * Show highlighted revision diff * Browse file tree of a revision and export by drag and drop * Search in the revision history on subject, author or hash * Switch between history view of branches easily * Commit view providing per hunk stage/unstage and commit
git-svn
Tegemist on GITi frontendiga SVN projektidele.
$ git init --bare /projekt
Võtame svn projekti
$ git svn clone http://example.com/projekt/trunk
Lisame selle projekti
$ git remote add pulk /projekt $ git push pulk master
Edasi võib teha /project all erinevad tööd git'iga ja lisada seal olevad muudatused tagasi SVNi
$ git svn dcommit
Lingid
Huvitav jubin nimega Gource võimaldab versioonihalduse ajalugu visualiseerida:
PS. Abiks raamat: http://progit.org/book/
GITi spikrileht