Jak se vypořádat se Subversion
Subversion (svn) je program, který spravuje zdrojový kód Gambas z repositáře na
http://sourceforge.net.
Repositář je přesně jako souborový systém, ale s tím že udržuje všechny změny.
Organizace repositáře Gambasu
Repositář Gambas je rozdělen na tři hlavní adresáře:
/trunk
|
Zdrojové kódy vývojové verze. Z této bude další majoritní verze Gambas (3.0).
|
/branches
|
Zdrojové kódy stabilních verzí. Pro každou verzi je zde jedna složka.
Jejich cílem je nadcházející minoritní verze (2.X).
Je možné, že některé části vývojové verze jsou vyvíjeny mimo složku trunk. Ty budou později přesunuty.
|
/tags
|
Zdrojové kódy všech vydaných verzí (složka pro každou, archivy).
Z nich je možné sestavit balíček poslední verze.
|
Obsah repositáře si můžete přečíst na adrese:
http://gambas.svn.sourceforge.net/viewvc/gambas/gambas
Získání přístupu do repositáře Gambasu
Každý si může vytvořit kopii repositáře na svém disku za pomocí následujícího příkazu:
$ svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/trunk/
Nebo:
$ svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/branches/2.0
pro stabilní verzi.
Poznámka: předpona před cestou v repositáři:
https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/
Jakmile budete hotovi, zkompilujete úplně stejným způsobem jako při kompilaci zdrojového archivu stáhnoutého z internetových stránek:
$ ./reconf-all
...
$ ./configure -C
...
$ make
...
$ sudo make install
...
Získání práva zápisu do Gambas repositáře
Pokud chcete vyvíjet nebo překládat pro Gambas, tak potřebujete mít právo
zápisu do repositáře.
Vytvořite si účet na sourceforge.net, a napište mi abych Vám mohl udělit práva pro zápis.
Jak to funguje?
Při jakékoliv změně repositáře se zvýší
číslo revize a připojí se
revizní záznam.
Ten je editován uživatelem, který vytváří modifikaci.
Vše se dělá s
svn
příkazy.
-
svn checkout
vytváří kopii repositáře na disku, a skryté adresáře .svn
pro monitorování změn.
-
svn commit
zasílá všechny změny zpět na server, žádá revizi záznamu, a zvýší číslo revize. Každý commit má svoje číslo revize a revizní záznam.
-
svn update
, aktualizuje místní kopii repositáře na poslední verzi.
Může se stát, že mezi tím co
checkout-nete a
commit-nete z svn někdo provede úpravu.
Vždy proto před
svn commit
proveďte
svn update
.
Zápis revizního záznamu
Při svn commit specifikujte editor použitý pro úpravy do proměnné
$EDITOR
.
Například:
$ EDITOR=gedit svn commit
Pozor: po odeslání pomocí svn commit již nemůžete upravovat revizní záznam. Zdá se, že sourceforge tuto funkci zakázal, čili dávejte si pozor a zkontrolujte ji pečlivě před odesíláním.
Formát revizního záznamu
ChangeLog (soupis změn) je téměř automaticky generovaný, pročež je ovšem potřeba dodržovat standardizovaný formát zápisu revizního záznamu.
Formát je následující:
-
ChangeLog slot, je mezi '
[
' & ']
'
-
Zápis ChangeLogu je: '
*
', (mezera), slovo: 'BUG
', 'NEW
' nebo 'OPT
', (dvojtečka), (mezera) a text, například takto: BUG: I fixed this bug.
'
BUG
' je pro opravu chyby, '
NEW
' je pro nové vlastnosti, překlad nebo některé úpravy,
a '
OPT
' je pro optimalizaci.
Slot je jméno Komponenty velkými písmeny, či jedno z následujících:
-
[INTERPRETER]
pro změny v interpretu (gbx3).
-
[COMPILER]
pro změny v kompilátoru (gbc3).
-
[ARCHIVER]
pro změny v archivátoru (gba3).
-
[INFORMER]
pro změny v informátoru (gbi3).
-
[DEVELOPMENT ENVIRONMENT]
pro změny v IDE (gambas3).
-
[CONFIGURATION]
pro změny v konfiguračním procesu automake/autoconf.
-
[WIKI CGI SCRIPT]
pro změny v CGI skriptu wiki.
-
[WEB SITE MAKER]
pro změny v generátoru webových stránek Gambas.
-
[EXAMPLES]
pro změny ve kterémkoliv příkladu.
Maximální počet znaků na řádek je 76.
Pokud je Vaše úprava v changelogu na více jak jeden řádek, použijte odsazení dvou mezer.
Prázdné řádky jsou ignorovány.
Všechny ostatní řádky do changelogu nejdou.
Examples
Provedl sem to, přiznávám se, ale v changelogu to vidět nebude.
[GB.QT]
* BUG: I fixed this bug.
* NEW: I made this very long modification....
and it takes more than one line to write it.
Tak tohle se v ChangeLogu taky nezobrazí.
[GB.SDL]
* BUG: What an awful bug!
[GB.GTK]
* NEW: I finally finished the component :-)
Prosím dodržujte tento formát. Je
opravdu skvělý...
Upozornění svn commit e-mailem
Je tu možnost zásílání změn v svn pomocí e-mailu pokaždé, když někdo provede svn commit s novou revizi.
Takto pokaždé víte kdy byla provedena poslední revize.
Pro zasílaní změn e-mailem navštivte:
mail-listu.
Název diskuzní skupiny je
gambas-devel-svn
.
Stav kopie repositáře
Chcete-li získat stav vašeho repositáře, spusťte příkaz
svn status
.
Každý status je popsán jedním nebo více písmeny:
-
?
je soubor neřízený subversion.
-
M
je upravený soubor.
-
C
je soubor v konfliktu.
-
G
je soubor v konfliktu který byl automaticky vyřešen s svn
příkazem.
-
A
je nově přidaný soubor nebo adresář.
-
D
je smazaný soubor nebo adresář.
-
U
je aktualizovaný soubor
-
... a tak dále.
Pro více informací o
konfliktech viz výše.
Upozornění
Žádná automatická kontrola struktury projektu!
Pokud přidáte, odstraníte, přejmenujete nebo přesunete soubor, musíte to sdělit příkazem:
-
svn add
přidání již vytvořeného souboru.
-
svn del
pro odstranění souboru.
-
svn move
pro přesun, či přejmenování souboru.
Zapomínání na svn add
je dost častá chyba (vím o čem mluvím :) )
Konflikty
Kdokoli může upravovat soubory repositáře zatím co vy upravujete ten stejný soubor u sebe na disku.
To je pak
konflikt a
svn
vám řekne když běží příkaz
svn update
, nebo
svn status
.
Pokaždé když
svn
objeví konflikt snaží se jej vyřešit automaticky sloučením vašich změn se změnami ostatních.
Pokud sloučení proběhne úspěšně, tak obdržíte soubor se stavem 'G'.
Pokud se slučování nepovede, soubor bude mít stav 'C' a budete muset konflikty vyřešit ručně:
-
Můžete tak učinit pomocí souboru, který
svn
upravil tak, že jsou vidět Vaše změny a změny ostatních bok po boku.
-
Nebo použijete kopie automaticky vytvořené pod-verzí (subversion). Obdržíte jeden soubor poslední verze a jeden ve verzi Vašeho lokálního svn. Jejich pojmenování je následovné: původní_název následovaný tečkou, písmenem 'r' a číslem revize. ?? Jen nahradí původní soubor kopií. ??
Po dokončení sdělte
svn
, že je konflikt vyřešen pomocí příkazu
svn resolved
na konfliktní soubor
Existuje nějaké riziko?
Vše je archivováno a vždy se můžete vrátit zpět, takže by tu neměl být žádný risk.
Navíc pokud pracujete na projektu samotného Gambas uvnitř repositáře (uvnitř složky
/trunk/app/src/gambas3
), tak pro Vás všechny
svn
příkazy může obstarávat vývojové prostředí. Běžte na záložku verzí (versioning/SVN) v dialogu vlastností projektu, kde najdete tlačítka pro aktualizaci projektu, jeho commit, či zrušení Vašich změn.
Pokud se něco zvrtlo, můžete použít příkaz
svn revert
. Tím se Vaše lokální kopie vrátí do stavu poslední kontroly, či aktualizace.