Author: [see doc]
Document comments: generated by HTML::FormatRTFWithImages (v?, using HTML::TreeBuilder v3.130, and HTML::Parser v3.55)

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!

Contents: [Koha Croatian user group]
• Koha Croatian user group (podaci o korisniku) 
• Koha Croatian user group (repozitoriji) 
• Koha Croatian user group (Upstream Koha development) 
• Koha Croatian user group (Checkout (lokalna kopija)) 
• Koha Croatian user group (FFZG promjene) 
• Koha Croatian user group (promjene iz drugog repozitorija) 
• Koha Croatian user group (branches) 
• Koha Croatian user group (imenovanje) 
• Koha Croatian user group (pregled) 
• Koha Croatian user group (kreiranje) 
• Koha Croatian user group (patches) 
• Koha Croatian user group (format‑patch) 
• Koha Croatian user group (am (apply mail patch)) 
• Koha Croatian user group (slanje na koha‑patches listu) 
• Koha Croatian user group (ne želim više svoje lokalne promjene!) 
• Koha Croatian user group (Više informacija) 
• Koha Croatian user group (Javni repozitorij) 
• Koha Croatian user group (git‑daemon)

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
• http://git.koha.org/ 
• git://git.koha.org/pub/scm/koha.git
Checkout (lokalna kopija)
git clone git://git.koha.org/pub/scm/koha.git

FFZG promjene
• http://git.rot13.org/?p=koha.git;a=summary 
• git://git.rot13.org/koha.git
• ssh://git.rot13.org/git/koha/
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:

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:
• DNS hostname produkcijske ili develpment mašine na kojoj je branch checkoutan
• veza na bug tracking (prefix‑broj‑kratak‑opis)
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:

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
• RailsConf Git Talk  (mnogo zgodnih animacija što se dešava sa pojedinim komandama)
• Koha wiki ima upute za korištenje git‑a 
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!)