git


Git sustav za praćenje promjena koji koristi Koha.

Mnogo bolje i potpunije upute: http://wiki.koha-community.org/wiki/Version_Control_Using_Git

DON'T PANIC!



podaci o korisniku

Da bi vaši commiti imali lijepo ime korisnika, morate prvo konfigurirati git

$ git config --global user.name "Dobrica Pavlinusic"
$ git config --global user.email "dpavlin@rot13.org"

Ovo je potrebno napraviti samo jednom za korisnika i primjenjuje se na svim repozitorijima na istoj mašini.

repozitoriji

Repozitoriji su jednostavno serveri koji nam omogućavaju da na njih šaljemo (push) ili sa njih vučemo (pull) promjene koje su u njima napravljene.

Kako je svaki checkout git-a potpuni repozitorij, svaki od njih može postati javni repozitorij koji može dijeliti promjene.

Upstream Koha development

Checkout (lokalna kopija)

git clone git://git.koha.org/pub/scm/koha.git

FFZG promjene

promjene iz drugog repozitorija

Ako želimo povući promjene iz drugog repozitorija (npr. druge instalacije unutar KOHA CUG-a) trebamo dodati novi remote repozitorij.

Na repozitoriju koji je napravljen od upstream Koha repozitorija, imamo jedan remote repozitorij origin za push i pull:

dpavlin@t61p:/srv/koha$ git remote -v
origin  git://git.koha.org/pub/scm/koha.git (fetch)
origin  git://git.koha.org/pub/scm/koha.git (push)

Sada ćemo dodati repozitorij sa FFZG development-a koristeći običnu ssh konekciju:

dpavlin@t61p:/srv/koha$ git remote add ffzg ssh://koha-dev.rot13.org/srv/koha/
dpavlin@t61p:/srv/koha$ git remote -v
ffzg    ssh://koha-dev.rot13.org/srv/koha/ (fetch)
ffzg    ssh://koha-dev.rot13.org/srv/koha/ (push)
origin  git://git.koha.org/pub/scm/koha.git (fetch)
origin  git://git.koha.org/pub/scm/koha.git (push)

i povući sve promjene lokalno:

dpavlin@t61p:/srv/koha$ git fetch ffzg
remote: Counting objects: 2019, done.
remote: Compressing objects: 100% (1440/1440), done.
remote: Total 1790 (delta 1116), reused 587 (delta 317)
Receiving objects: 100% (1790/1790), 1.40 MiB | 1.12 MiB/s, done.
Resolving deltas: 100% (1116/1116), completed with 67 local objects.
From ssh://koha-dev.rot13.org/srv/koha
 * [new branch]      ffzg       -> ffzg/ffzg
 * [new branch]      ffzg2      -> ffzg/ffzg2
 * [new branch]      koha-lxc   -> ffzg/koha-lxc
 * [new branch]      master     -> ffzg/master
 * [new branch]      origin     -> ffzg/origin
 * [new branch]      rt-390-signatura-zatvorenog-spremista -> ffzg/rt-390-signatura-zatvorenog-spremista
From ssh://koha-dev.rot13.org/srv/koha
 * [new tag]         ffzg       -> ffzg

branches

Branches su mjesta na kojima se povjest promjena grana u dva dijela. Jedan je development koji rade upstream developeri Kohe, a drugi su naše lokalne promjene za nešto.

Nakon nekog vremena, potrebno je dva branch-a spojiti u jedan da bi preuzeli promjene. gitk nam može pokazati to kao stablo:

git-branch-merge.png

Promjene se mogu preuzeti (merge) iz jednog branch-a u drugi.

imenovanje

Branches nisu ništa drugo nego ime za svaku točku i kojoj se razvoj dijeli u dva toka.

Dobri nazivi za branch:

pregled

dpavlin@t61p:/srv/koha$ git branch -a
* master
  remotes/ffzg/ffzg
  remotes/ffzg/ffzg2
  remotes/ffzg/koha-lxc
  remotes/ffzg/master
  remotes/ffzg/origin
  remotes/ffzg/rt-390-signatura-zatvorenog-spremista
  remotes/origin/3.0.x
  remotes/origin/HEAD -> origin/master
  remotes/origin/biblibre-acq-preview-only
  remotes/origin/biblibre-integration
  remotes/origin/biblibre-sopac
  remotes/origin/labels_recon
  remotes/origin/master
  remotes/origin/rfid-direct-tagging
  remotes/origin/sysprefs_editor

kreiranje

Pretpostavimo da želimo kreirati branch za instalaciju na koha.ffzg.hr:

dpavlin@t61p:/srv/koha$ git checkout -b koha.ffzg.hr remotes/ffzg/ffzg2
Branch koha.ffzg.hr set up to track remote branch ffzg2 from ffzg.
Switched to a new branch 'koha.ffzg.hr'

patches

format-patch

git format-patch

Naš cilj je napraviti patcheve od promjena koje smo napravili u našem branch-u:

git-branch-sip-debug.png

Iz slike vidimo da smo napravili sip-debug branch iz postojećeg 3.0.x

koha-lxc:/srv/koha# git format-patch -o sip2-changes 3.0.x
sip2-changes/0001-disable-PreFork-to-enable-easy-debugging.patch
sip2-changes/0002-remove-eval-so-it-won-t-hide-errors.patch
sip2-changes/0003-warn-about-missing-institutions-entry-in-config-xm.patch

Ovo će napraviti onoliko patcheva koliko imamo commita na našem branch-u koji smo napravili od 3.0.x

am (apply mail patch)

Prvo ćemo napraviti novi branch u našem repozitoriju sip2-debug u koji ćemo importati naše patcheve:

koha-lxc:/srv/koha# git checkout -b sip2-debug master
Switched to a new branch "sip2-debug"

Nakon toga možemo applyati samo one promjene koje su nam interesantne:

koha-lxc:/srv/koha# git am sip2-changes/0001-disable-PreFork-to-enable-easy-debugging.patch
Applying disable PreFork to enable easy debugging

koha-lxc:/srv/koha# git am sip2-changes/0002-remove-eval-so-it-won-t-hide-errors.patch
Applying remove eval so it won't hide errors

koha-lxc:/srv/koha# git am sip2-changes/0003-warn-about-missing-institutions-entry-in-config-xm.patch
Applying warn about missing <institutions> entry in config xml

slanje na koha-patches listu

Koha prima patcheve preko koha-patches liste

yada, yada, nije testirano!

# create all changes against master in patches dir:
git format-patch -p patches master
git send-mail --to koha-patches@koha.org patches

# reciving side would just pull whole mbox
git am mbox

ne želim više svoje lokalne promjene!

git reset --hard

Oprez ovo će pobrisati sve promjene koje su različite od zadnjeg commit-a

Više informacija

Javni repozitorij

Da bi drugi korisnici mogli kopirati promjene, dovoljan je samo ssh. Međutim, za anonimne korisnike treba podesiti git-daemon

Dobar savjet je prvo instalirati gitweb za overview.

git-daemon

git-daemon --verbose --export-all --base-path=/var/cache/git

U Debian-u postoji paket git-daemon-run koji koristi runit (YMMV) koji se podešava u

dpavlin@mjesec:~$ cat /etc/sv/git-daemon/run    
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec git-daemon --verbose --export-all --base-path=/var/cache/git

Dodan je --export-all i popravljen --base-path (sic!)