====== SVN ======
===== URL kde bezi svn server =====
svn://192.168.241.3/var/lib/svnrepos/embedded
===== Pouzivany klienti =====
* integrovany klient v eclipse
* kdesvn - Prioritne odporucany pre OS Linux
* esvn
===== System vyvoja =====
==== Vyvojovy branch ====
Vytvara sa v pripade potreby novej funkcionality a platia nasledovne pravidla:
- Sluzia v pripade vacsich prerabok
- Dorabania novej funkcionality (v pripade ze dorabka trva viac ako den, dva)
- Mergovanie prebieha po implementovanie novej funkcionality a aspon zakladnom otestovani konkretnej funkcionality
- Je dolezite dbat na to aby nova funkcionalita nepokazila uz implementovane a funkcne veci
\\
==== Release branch ====
Vytvara sa kazdy alebo kazdy druhy mesiac a platia nasledujuce pravidla:
- **Nedoraba sa do nich nova funkcionalita**,
- **Vzdy je podporovany jeden, __posledny release__. V specifickych pripadoch, ak je potrebne vykonat bugfix do stasieho release-u, je nutne odsuhlasenie veduceho teamu a zabezpecenie upravy bugu aj v najnovsom release-e.**,
- Plati na nich ak je to potrebne, cislovanie branchov (stredne cislo buildu podla [[libraryversion:libraryversion|cislovanie branchov]]),
- Obsahuje len opravy chyb (sporne situacie urci veduci),
- Je dolezite pravidelne (denne) mergovanie do trunku, aby sa bugfix prejavil v trunku.
===== Organizovanie zdrojovych kodov v svn =====
Korenovy adresar svn repozitara sa nachadza: [[svn://192.168.241.3/var/lib/svnrepos/embedded]]
==== Clenenie repozitara ====
Repozitar sa z logickeho hladiska deli na viacero casti:
* Dopravne aplikacie a pevne spojene aplikacne kniznice
* Ine aplikacie ako su automaty, pomocne programy a pod.
* Zdielane kniznice
\\
Z pohladu udrzby na:
* hlavna vetva nachadzajuca sa v adresari "trunk"
* vyvojove a release branche nachadzajuce sa v adresaroch "branches"
=== Dopravne aplikacie ===
Korenovy adresar dopravnych aplikacii: [[svn://192.168.241.3/var/lib/svnrepos/embedded]]
Repozitar obsahuje aplikacie a pevne spojene kniznice aplikacnej logiky:
- EOnboardComputer
- EAppCore
- ESlave
- ETicketIssueLogic
=== Kniznice ===
Korenovy adresar kniznic: [[svn://192.168.241.3/var/lib/svnrepos/embedded]]
Adresar je podla zamerania kniznic dalej deleny na celky:
* **Common kniznice** - maju spolocnu logiku pre vsetky aplikacia a platformy (windows, linux 2.4 aj linux 2.6)
* **UI kniznice** - disponuju kniznicami, ktore definuju UI aplikacii
* **Devices kniznice** - obsahuju kniznice postavene nad systemom EDeviceSystem alebo DeviceCommon. V pprevaznej vacsine su to ovladace zariadeni
===== Praca s klientom kdesvn =====
* import zdrojovych kodov z disku
- otvorime si databazu SVN [[svn://192.168.241.3/var/lib/svnrepos/embedded]] nie working copy
- v menu Subversion/General klikneme na import folders into current a najdeme cestu k priecinku , stlacime ok a pridame komentar
\\
* pridavanie suborov/adresarov
- kliknite pravym tlacitkom na subor/adresar a v menu zvolte "Add selected files/dirs" - status by sa mal zmenit z "Not versioned" na "Locally added"
- tuto zmenu je potrebne este potvrdit - znova kliknite pravym tlacitkom na subor/adresar a v menu zvolte "Commit"
\\
* ziskanie zdrojovych kodov zo svn:
- v klientskom programe zvolte File->Open
- vlozte URL kde bezi svn server: [[svn://192.168.241.3/var/lib/svnrepos/embedded]]
- nasledne nalistujte projekt ktory chcete stiahnut
- kliknite pravym na priecinok projektu a zvolte: CheckOut current repository path
- do editboxy "Select target directory" zvolte cestu kde stiahnut projekt na disk
- po stiahnuti projektu sa zvoleny projekt vyberie ako aktualny
\\
* pouzivanie svn:
- v klientskom programe zvolte File->Open
- z disku nalistujte projekt na ktorom chcete pracovat a potvrdte volbu
- zelenym su zvyraznene veci krore su novsie v databaze svn - vy na disku mate starsiu verziu - stiahnutie novsich veci volva "Update to head"
- cervenym su veci ktore ste na disku zmenili - zaslanie vlastnych zmien do databazy svn "Commit"
\\
* vytvaranie branchu:
- skopirovat(mysou drag and drop pretiahnut adresar trunk do adresara branches) adresar trunk z projektu do adresara branches
- vytvorenu kopiu premenovat(klavesa F2) - nazov branchu
- dolezite je pridat poznamku pri vyrvarani branchu aby sa vedeli reviziu vzniku branchu - poznamka v tvare "created branch 0903"
- ak je to vyvojovy branch, pridat jeho popis do [[libraryversion:libraryversion#popis_vyvojovych_branch-ov| popis_vyvojovych_branch-ov]]
\\
alebo je mozne vytvorit branch pomocou kdesvn: "Subversion/General/Copy" (nad trunkom zobrazenom v pravom okne),
\\
alebo pomocou prikazu:
svn copy svn://192.168.241.3/var/lib/svnrepos/embedded/Apps/VehicleSystem/trunk \
svn://192.168.241.3/var/lib/svnrepos/embedded/VehicleSystem/branches/1311 \
-m "created release 1311 from trunk"
===== Rucne Mergovanie - old, nove pravidla v sekcii pravidla =====
novsie pravidla mergovania : [[coding:rules_projects| pravidla a poznatky z mergovania projektov]]
mergovanie zmien vo vetve branchu do trunku
http://svnbook.red-bean.com/en/1.2/svn.ref.svn.c.merge.html
svn merge -r N:M SOURCE[@REV] [WCPATH]
mergovanie zmien od verzie N po verziu M do
WCPATH is the working copy path that will receive the changes. Default value is "."
priklad:
aktualny adresar je stiahnuty adresar trunk daneho projektu
svn merge -r 1305:1750 svn://192.168.241.3/var/lib/svnrepos/embedded/Apps/VehicleSystem/branches/1311
kde 1305 je cislo revision od ktorej zacal branche a 1750 je aktualne revizia(HEAD) - revizia po ktoru chceme mergovat
Nasledne po tomto kroku je potrebne otvorit a skontrolovat vysledok(working copy) v klientovi(kdesvn) a po vizualnej kontrole sa vysledky commitnut do SVN komit sa prevazda s poznamkou "Merged revision 1750-1750 from branch 0903" Tato poznamka je potrebna pre pripad, ked sa este opravia nejake chyby v tomto branchu, ktory uz bol mergovany.
priklad comitu z command line
svn ci -m "Merged revision 1750-1750 from branch 0903"
Informacie o historii mergeov sa daju pozriet aj z properties mergeinfo:
cd FareSystem/branches/0903
svn propget svn:mergeinfo .
/trunk:341-390
alebo:
cd FareSystem/branches/0903
svn mergeinfo svn://192.168.241.3/var/lib/svnrepos/embedded/Apps/VehicleSystem/trunk
blizsie info na: [[http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.basicmerging.mergeinfo]]
===== Undo =====
Ked sa niekomu podari omylom commintnut nieco co nechce a chce aby sa to v svnku vratilo do povodneho stavu. Je mozne pouzit svn merge na vratenie lokalnej kopi a potom commitnut lokalne zmeny do svn-ka. Jedine co treba je vytvorit spatny rozdiel (reverse difference). Da sa to cez specifikovanie revizie: --revision 303:302, alebo --change -303.
===== Dokumentacia ku SVN: =====
http://svnbook.red-bean.com/en/1.2/index.html
===== Tree conflict =====
potrebne v problematickom adresari pustit svn cleanup (pred tym mat nainstalovane svn: sudo apt-get install subversion)
===== Project 'locked' problem =====
V situaciach, ked kdesvn hlasi, ze woking copy, nad ktorou pracujete je locked a nepomaha cleanup, je mozne vyriesit situaciu rucnym odstranenim locknutych suborov prikazom:
find . -name 'lock' -exec rm -v {} \;