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.