Table of Contents

Navod na pracu so systemom git

Git windows

Git windows

Instalacia systemu

Instalaciu systemu git.

Pre distribuciu *ubuntu/debian:

sudo apt-get install git

Zoznam repozitarov - server

Na servri phoenix sa nachadzaju repozitare na ceste:

/home/git/repositories/

Repozitare cez https su pristupne na ceste

https://git.emza.inside.transdata.sk/git/nazov_repozitaru)

Zoznam repozitarov

Pridanie noveho repozitara

Pridavanie noveho repozitara vykonava spraca git repozitarov M.Chyla. Kazdy novy repozitar je POTREBNE zdokumentovat na tejto wiki stranky, minimalne kratkym popisom na co dany repozitar sluzi.

Nazvoslovie pridavaneho repozitaru:

Prvotne nastavenie - server

Vstupne premenne pre navod:

Na zaklade definovanych ciest je mozne vytvorit repozitar Vytvorenie repozitara

Prvotne nastavenie - klient

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git config --list
cp /usr/local/emtest/DevelInstall/git/.gitignore_global ~/.gitignore_global
ALEBO
ln -s /usr/local/emtest/DevelInstall/git/.gitignore_global ~/.gitignore_global

Nasledne vykonat 'git config'. Pri update suboru prikaz nie je potrebny:

git config --global core.excludesfile ~/.gitignore_global

Emailove notifikacie pull requestov

Emailove notifikacie pre pull requesty su implementovane pomocou rozsirenia nastroja smartgit: Server side component

Rozsirenie sa nachadza na phoenixe na ceste:

/home/git/smartgit-reviewserver

Kazdy repozitar pozadujuci emailove notifikacie musi mat v git hookoch skript post-receive nachadzajuci sa na

/home/git/.git-templates/hooks

Pristup k repozitarom

Po dohode sa robi clone zdrojovych suborov na lokalny pocitac na cestu:

/opt/devel/src/

Zoznam git uzivatelov a pristup k repozitarom

Uzivatel Dostupne repozitare typ SSH pristupu Prava
prosoft vendingmachine.git
vendingmachineui.git
git-shell R+W
git vsetky repozitare git-shell R+W

Pristup ku git repozitarom je rieseny na zaklade vymeny SSH klucov medzi klientom a servrom. Pri prihlaseni sa cez ssh pod spominanymi uzivatelmi je 'Git shell' nastaveny z bezpecnostneho dovodu, vid Nastavenie git-shell. Git shell umoznuje pracu len s repozitarom a neumoznuje pracu so servrom.

Prava su riesene na systemovej urovni pomocou uzivatelov a group: Nastavenie prav pri ssh pristupe ku gitu.

Clone repozitaru

Pre pristup k repozitarom pomocou uzivatela git je potrebne, aby spravca repozitara pridal vase verejne kluce do authorized_keys na serveri phoenix. Ak este nemate vygenerovane verejne kluce, navstivte sekciu: vymena a generovanie verejnych klucov

Git repozitar sa ziska zo servra prikazom:

git clone git@192.168.241.14:/pozadovany_repozitar.git

Clone repozitaru s podmodulmi

Manual pre pracu so podmodulmi: Podmoduly

V pripade, ze repozitar ma nastavenu zavislost na iny repozitar tak sa repozitar ziska aj s podmodulmi nasledovne:

git clone --recursive git@192.168.241.14:/pozadovany_repozitar.git

Realny priklad repozitaru s podmodulmi:

git clone --recursive git@192.168.241.14:/vehiclesystemapps.git VehicleSystem

Repozitar VehicleSystem obsahuje zdrojove subory pre citacku a palubny pocitac. Okrem aplikacii su do repozitara dolinkovane aj repozitare: Core, DataIO, AppCore, ApplicationTexts, CommonDevices, OBCDevices, OBCUI, SlaveUI, Dispatching.

Stiahnutie repozitaru s podmodulmi konkretny branch:

git clone --recursive -b develop git@192.168.241.14:/vehiclesystemapps.git VehicleSystem

Priznak '–recursive' stahuje aj podmoduly. Ked sa '–recursive' nepouzije, podmoduly sa nestiahnu ale budu reprezentovane prazdnymi priecinkami.

Praca s repozitarom

Vykonavanie a nahravanie zmien do lokalneho a vzdialeneho repozitara zmeny v repozitaroch

Overenie zmien lokalneho repozitara so vzdialenym repozitarom porovnavanie zmien

Stiahnutie poslednych zmien v submoduloch:

git pull --recurse-submodules

Ak boli pridane nove podmoduly tak je potrebny prepinac –init:

git submodule update --init --recursive

Overenie aktualne nastaveneho branch-a/HEAD-u:

git log --oneline --decorate

Nastavenie branche-u celom repozitari aj s podmodulmi:

git submodule foreach --recursive git checkout master

Dokumentovanie a tvorba komentarov zmien do git-u

Velmi dolezitu sucast prace so systemom git predstavuje pisanie poznamok pri nahravni zmien do repozitara. Z komentarov v repozitari sa generuje vyvojarsky changelog, ktory dokumentuje vyvoj produktu.

Nahravanie zmien do repozitaru rozdelujeme do styroch zakladnych operacii:

  1. Oprava chyby - chyby su opravovane na zaklade task-u v systeme mantis (helpdesk),
  2. Implementacia novej poziadavky - nove poziadavky su implementovane vyhradne na zaklade task-u v systeme redmine,
  3. Refaktoring,
  4. Nahravanie hash-ov podmodulov repozitaru

Format komentarov pre operacie:

Oprava chyby - system Mantis/Helpdesk

BugID CISLO_CHYBY_V_SYSTEME_MANTIS - zrozumitelny popis vykonanych uprav/oprav

Oprava chyby - system Redmine

RedmineBug #CISLO_CHYBY_V_SYSTEME_MANTIS - zrozumitelny popis vykonanych uprav/oprav

Implementacia novej poziadavky

RedmineTask #CISLO_TASKU_V_SYSTEME_REDMINE - zruzumitelny popis implementovanej vlastnosti

# - Mriezka pred cislom je dolzeita pretoze redmine si vie nasledovne na zaklade tohto sparovat repozitar a redmine task.

Refaktoring

Refaktoring - preco sa kod prerabal + zrozumitelny popis vykonanych uprav

Nahravanie hash-ov podmodulov repozitaru

Commit NAZOV_PODMODULU hash - popis vykonanych uprav nad podmodulom od posledneho nahratia hash-u

Pridanie podmodulu

Pridanie podmodulu je mozne vykonat prikazom:

git submodule add git@192.168.241.14:/home/git/repositories/repozitar.git nazov_priecinka_pre_podmodul

Commit a push zmien sa vykona prikazom:

git commit -m "added NAZOV_MODULU module"

http://git-scm.com/book/en/v2/Git-Tools-Submodules

Odstranenie podmodulu

Odstranenie podomodulu je potrebne konzultovat so spravcom repozitara

Pre odstranenie podmodulu je potrebne vykonat sadu prikazov:

git submodule deinit nazov_podmodulu    
git rm nazov_podmodulu
git rm --cached nazov_podmodulu
rm -rf .git/modules/nazov_podmodulu

Merge v nastroji smartgit

Merge release/1501 do brnache-u develop

Merge remote-tracking branch 'BRANCHE_Z' into BRANCH_DO ( riadok generovnay smartGIT-om)

Resolved conflicts: ( riadok generovnay smartGIT-om)
	NAZVY SUBOROV - v ktorych boli vyriesene konflikty. Potencionalne problemy, preto je spravne ich dat do logu ( riadok generovnay smartGIT-om)

Features: ( rucne pisana sekcia )
	popis zmien

Import zdrojovych suborov do repozitara

Pred prvou pracou s novym a prazdnym repozitarom je potrebne ho inicializovat prvym push-om do repozitara nasledovne:

$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit' 
$ git remote add origin git@192.168.241.14:/project.git
$ git push origin master

mozne problemy:

- v pripade windows musia byt dvojite apostrofy: git commit -m "initial commit"

- ak je pri vytvarani repozitara adresar prazdny moze vratit chybu:
error: src refspec master does not match any.
  v tom pripade treba pridat do adresara nieco na comitnutie a opakovat kroky od kroku $ git add .

Online trening

Online trening

Using Git with Visual Studio 2013 Jump Start

Praca s programom SmartGit

V pripade prace s repozitarom, kde su nastavene aj podmoduly je potrebne/ziaduce, zapnut nasledovne nastavenie, aby pri fetch-y tahalo zmeny aj zo submodulov:

Pad programu SmartGit

Ak sa Vam stava, ze vam obcas padne smartgit pri prepinani medzi review komentarmi skuste zmenit v subore smartgit.sh nasledovne:

export SWT_GTK3=0

na

export SWT_GTK3=0

Git flow system

Git flow predstavuje system prace, system release-ovania, branche-ovania a system implementacie novych vlastnosti nad verzionovacim systemom git.

Pracu s git flow priblizuju clanky:

Vizualizacia systemu prace s gitflow

Pre podrobnejsi popis Support Branches v oficialnej dokumentacii

Nastavenie git flow - system releasovania a podpory

Nad repozitárom aj každým submodulom je potrebne nastaviť git flow

Oprava chyby (hotfix) do stable verzie (master)

Postupnost opravy chyby v stable verzii (master) aplikacie:

  1. Vyuziva sa gitflow system v nastroji smartgit, polozka 'Git-Flow' → 'Start Hotfix' (aj nad kazdym upravovanym submodulom)
  2. Nazov Hotfix branchov vo formate BugIDXXXXXX/RedmineBugXXXXXX ( hotfix/BugIDXXXXXX alebo hotfix/RedmineBugXXXXXX predpona hotfix sa pridava automaticky, v pripade opravy viacerych chyb naraz hotfix/BugIDXXXXXX_BugIDXXXXXX … ), pricom XXXXXX prestavuje cislo bugu. Ku kazdemu hotfixu MUSI existovat chyba v systeme helpdesk alebo redmine(ak sa opravuje uz existujuci hofix tak XXXXXX_1, _2, …)
  3. Vykonanie potrebnych uprav nad hotfix branchom
  4. Pri upravach submodulov / libiek pozor na to, ze treba aj zdvihnut verziu kniznice v .pro a projlibs.in (aj palubak aj citacku ak treba), ako aj v zavislych submoduloch (pozri: libweb)
  5. Commit zmien
  6. Spojenie zmien branchu a stable verzie pomocou 'Git-flow' → 'Finish hotfix'. Zmeny sa spoja do vetvy 'master' a 'develop' (pozor! stava sa, ze smartgit prepne repoztar nad submodulom do developu, co moze potom robit problemy pri finishovani hotfixu nad hlavnym repozitarom)

Implementacia feature do develop verzie

Postupnost prace z feature:

  1. Vyuziva sa gitflow system v nastroji smartgit(licenciu distrubuuje spravca siete), polozka 'Git-Flow' → 'Start Feature'.
  2. Nazov feature branch-u: RedmineTaskCISLO_REDMINE_TASK
  3. Implementacia potrebnej novej funkcionality
  4. Ukoncenie feature polozka 'Git-Flow' → 'Finish Feature'.
  5. Vybrat polozku create simple commit a nasledne Finish

Prerelease - Vytvaranie zastabilizovanej verzie develop vetvy

Zastabilizovanie zmien sluzi na posledne doladenie funkcnosti nadchadzajuceho release-u. Do prerelease vetvy sa nedorabaju ziadne nove poziadavky ani refactoring.

Postup vytvaranie prerelease-u:

  1. Postupne povytvarat release vetvu pre kazdy podmodul hlavneho repozitaru
  2. Vytvorit release vetvu pre hlavny repozitar

Ukoncenie prace na prerelease a zaclenenie zmien do master a develop vetvy

Po odladeni prerelease vetvy 'release/cislo_release-u' je potrebne zmeny zaclenit do master vetvy pre vytanie stable verzie.

Postupnost zaclenenia zmien prerelease verzie 'release/cislo_release-u' do stable 'master' vetvy:

  1. Vyuziva sa gitflow system v nastroji smartgit(licenciu distrubuuje spravca siete), polozka 'Git-Flow' → 'Finish release'.
  2. Nezabudnut dopisat Feature sekciu ako pri klasickom mergovani

Support release - podpora neaktualnych verzii produktu

Pred mergom prerelase vetvy do master vetvy sa vytvori support branch z hlavneho repozitara aj vsetkych podmodulov. Do support branch-u sa opravuju LEN kriticke chyby a to priamo a NIE pomocou hotfix tlacidla v git-flow-e. Po vykonani opravy nad support branch-om je potrebne zaclenit zmeny do master a develop vetvy, aby sa zabezpecilo, ze sa zmeny/opravy dostanu aj do najnovsej verzie.

Zaclenenie zmien zo support do master vetvy

Pre zaclenenie zmien je potrebne vykonat nasledovne kroky:

  1. Vykonanie uprav nad support branch-om a jeho podmodulmy
  2. pushnutie zmien v support branch-y do origin-u
  3. Prepnutie sa do master vetvy
  4. Vytvorenie hotfix-u podla pravidiel Pravidla opravy chyb
  5. Aplikacia zmien zo support branch-u pomocou cherry-pick( aplikovanie urcitej zmeny do specifickeho commit-u, v nasom pripade HEAD master-a ) do master vetvy
  6. Ukoncenie hot-fixu zaclenenie zmien do master a develop vetvy

Ulozenie zmien nad aktualnym branch-om do stash-u

V pripade, ze mate rozrobene zmeny nad urcitym branch-om a potrebujete sa prepnut na iny( napriklad pre vytvorenie hotfixu ) je to mozne pomocou stash-nutia zmien pomocou tlacidla v smartgit 'local' → 'save'. Musite byt nastaveny v navigacnom menu na podpomodule, ktory pozadujete ulozit

Integracia pull request-u

Ak mame pull request, ktory bol schvaleny, potrebujeme ho integrovat, teda zmeny vykonane v zdrojom branch-i pushnut do cieloveho branch-u. Pri integracii postupujeme nasledovne:

Hotovo, zdrojovy branch bol mergnuty do cieloveho branch-u, o com sa mozno presvedcit v logu.

Zmena aktualnej hlavy podmodulu na hash z hlavneho repozitára v SmartGit

V prípade že podmodul je ručne nastavený na nejaký commit a chceme aby trackoval commity podľa hlavného repozitára (napríklad podmodul ApplicationTexts na globálny repozitár develop) stačí odstrániť zmenu hashu (discard ako na obrázku) v hlavnom repozitári a SmartGit prehodí aktuálny commit podmodulu na hash ktorý je uložený v hlavnom repozitári.

Problemy pri praci s gitom

Pridanie uzivatela do gitolite-u

Problem: Po pridani uzivatelo do gitolite-admin-u pytalo heslo pri pokuse o clone repozitaru.admin-u pytalo heslo pri pokuse o clone repozitaru.

Problem sa mi podarilo vyriesit pomocou stranky: http://gitolite.com/gitolite/sts.html

Sekcia: ssh deamon asks for a password

Problem bol v tom ze nepridaval public key do authorized_keys. Prikazom 'gitolite setup' konfiguraky obnovil a pridal tam vsetky zname public key z repozitaru gitolite-admin. Nasledne uz vsetko fungovalo. Mozno sa vam to hodi ak budete riesit podobny problem.

Problem pri pridavani repozitara

Po pridani noveho repozitara je potrebne pre spravnu inicializaciu repozitara zavolat

git init --bare

Sposobovalo to problemy pri stahovani:

 user@user-PC:/tmp$ git clone git@192.168.241.14:/repo.git
Cloning into 'repo'...
FATAL: R any kernel sipikal DENIED by fallthru
(or you mis-spelled the reponame)
fatal: Could not read from remote repository.

Sposobovalo to problemy aj pri rekonfiguracii gitoliteu

git@Phoenix:~/gitolite/src$ ./gitolite setup
FATAL: could not symlink /home/git/.gitolite/hooks/common/update to repo.git/hooks
 at /home/git/gitolite/src/lib/Gitolite/Conf/Store.pm line 371