29. dubna 2013

Perforce best practices

Po více jak dvou letech se končí moje soupoutničení s verzovacím systémem Perforce (P4). Z počátku nebylo naše soužití zcela harmonické. Ale poté, co jsem přijal pravidla hry (které P4 nastavuje) jsem si tento systém oblíbil. A nyní bych se chtěl o své zkušenosti podělit.

Počáteční rozčarování a zklidnění

Srážka nepřipraveného vývojáře s P4 může být dost nepříjemná a frustrující. Vývojáři mají dost často rutinní zkušenost s SVN a podobnými nástroji. P4 má v některých aspektech jinou filozofii, která (z hlediska třeba SVN) nemusí být intuitivní. Když člověk nepochopí principy, které se za tím skrývají, může dopadnout podobně, jako evropský řidič v Anglii (Irsku, Austrálii, ...) - nadává, jak to "ty pitomý Angláni blbě vymysleli".

Pokud se člověk rozhodne nepřijmout filozofii P4, tak může skončit jako někteří z mých kolegů, kteří pořád trousí hlášky o "debilním Perforsu". Holt rok je asi příliš krátká doba na to, naučit se to pořádně ;-)

Mě zkušenost naučila číst (v) dokumentaci. Rád totiž dělám věci správně a (dobrá či dokonce kvalitní) dokumentace mi přijde jako efektivní způsob jak zjistit, jak věci fungují. A navíc si člověk zbytečně nepřenáší zlozvyky odjinud. Takže než s P4 bojovat, přijde mi lepší přijmout jeho pravidla hry. On se vám za to odvděčí a rozkvete vám pod rukama :-)

Možná teď čekáte, že napíšu něco o té filozofii a o věcech, které jsou "jinak". Ale nenapíšu. Nechci se pouště do nějaké srovnávací studie, kterou by to asi skončilo. Prostě jen teď uvedu, jak P4 používám já.

Typický lifecycle

Následující lifecycle mi vykrystalizoval během těch dvou let používání a osvědčil se mi, jako účinný prostředek proti některým nástrahám P4.
  1. Check Out (Ctrl+E)    konkrétního projektu (nebo jeho části) do nového changelistu (Alt+N -> Alt+C).
  2. Editace zdrojových kódů.
  3. Na changelistu, který chci komitovat: Revert Unchanged Files   .
  4. Na adresáři, který jsem původně checkoutoval: Reconcile Offline Work a přidat eventuální soubory do changelistu.
  5. Kontrola souborů v changelistu. Pokud byly soubory modifikované, tak Diff Against Have Revision (Ctrl+D).
  6. Submit (Ctrl+S -> Alt+S)   .
Z tohoto seznamu bych vypíchnul body 3 a 4. Revert Unchanged Files je důležitý, aby se nekomitovaly nezměněné soubory. Reconcile Offline Work zajistí přidání (Mark for Add   ) nových souborů do changelistu.

Changelisty

Changelist je v P4 seskupením souborů, které chci komitovat. Já si vytvářím nový changelist pro každý kousek práce, typicky jedna položka v issue tracking systému. Novému changelistu pak nejčastěji dávám popis ve stylu: <issue ID>; <issue name>, <description>. Např.: SWS-12; Gradle tutorial, Jetty initial implementation.

Pending Changelists
Na záložku Pending Chagelists, která zobrazuje moje chagelisty, se přepnu klávesovou zkratkou Ctrl+1, nebo ikonou   .

P4 nabízí také tzv. default changelist, který ale používám pouze v jediném případě - pokud v changelistu potřebuju mít něco, co nechci komitovat a později to revertnu. Pokud bych to náhodou přesto potřeboval, vždy se to dá převést do jiného changelistu. Důvod, proč něco nekomitovat a mít to v changelistu je prostý - pokud si natáhnu do lokálního workspace nějakou revizi z depotu, P4 všechny soubory nastaví na read-only. A to může některým editorům vadit. Takže to šupnu do defaultu.

Shelved Files

Aneb soubory na poličce. Někdy mám něco rozpracovaného, ale nechci to ještě komitovat. Zároveň ale nechci, aby úpravy byly pouze u mne na lokálním počítači. Tak je přesunu z changelistu do poličky na serveru.

Shelved Files

Bookmarks

Souborová struktura v rámci daného depotu může být velmi rozsáhlá (na aktuálním projektu je to přes 10 000 souborů). Proto jsem si oblíbil záložky (Bookmarks) s nastavenými klávesovými zkratkami.

Bookmarks

Klávesové zkratky

P4 má výborného grafického klienta: P4V. A tak jako u každé grafiky, i zde se hodí (a efektivitě napomůžou) klávesové zkratky. Tyhle jsem si oblíbil:
  • Get Latest Revision: Ctrl+Shift+G
  • Check Out: Ctrl+E
  • Submit: Ctrl+S -> Alt+S
  • Revert Files: Ctrl+R
  • Diff Agains the Have Revision: Ctrl+D
  • Next Diff (P4Merge): Ctrl+2
  • Previous Diff (P4Merge): Ctrl+1
  • Close (P4Merge): Ctrl+W
  • Pending Changelists: Ctrl+1
  • Submitted Changelists: Ctrl+2
  • Skok na zazáložkovaný soubor/adresář: Ctrl+Shift+1 (až n)
  • Skok do file browseru z daného adresáře/souboru: Ctrl+Shift+S
K dokonalé spokojenosti mi chybí absence dvou zkratek: Revert Unchanged Files a Reconcile Offline Work.

Závěr

Myslím, že dobrá znalost (aktuálně používaného) verzovacího systému patří ke ctnostem každého vývojáře. Za ty dva roky jsme se s P4 docela skamarádili a pokud bych ho někdy v budoucnu zase potkal, tak se rozhodně nebudu zlobit.

A co vy, máte nějakou oblíbenou P4 vlastnost? Nebo vás naopak na něm něco rozčiluje? ;-)

Související články


Externí odkazy

11 komentářů:

  1. Pracoval jsem s P4, naštěstí, jen chvíli a nijak si ho neoblíbil. Skutečně je tak dobrý, aby za něj stálo platit?

    Mimochodem Linus Torvalds už v roce 2007 říkal v Googlu, že mají Perforce zahodit, hned. Jeho přednášku musíte vidět http://www.zdrojak.cz/zpravicky/video-na-vikend-linus-torvalds-o-gitu/

    OdpovědětVymazat
    Odpovědi
    1. Pro běžného vývojáře/uživatele nepřináší P4 nic světoborného. Jeho síla je hlavně v grafických nástrojích na branchování, merge a správu vývojových větví. To je třeba hlavní důvod, proč se pro něj rozhodli v Raiffeisen bank.

      Ale jestli to za ty peníze stojí, to nevím - v téhle pozici jsem nikdy nebyl. Kdybych já volil VCS na projekt, bylo by to nejspíš něco jiného.

      Vymazat
  2. K čemu je to teda vlastně dobré? Přináší to něco navíc třeba oproti tomu svn?

    OdpovědětVymazat
    Odpovědi
    1. No, je to dobrý na verzování :-)

      Porovnání některých VCS je tady: Competitive Analysis of Perforce.

      Vymazat
    2. Z nějakého důvodu jim tam chybí srovnání s Gitem :)

      Vymazat
    3. Třeba se srovnání s Gitem bojí :-)

      Vymazat
    4. Přesně. Pokud totiž někdo touží po vlastnostech P4, nutně bude porovnávat s Gitem. S ani jedním do hloubky neumím, nicméně na první osahání se podle mě liší v GUI nástrojích, ale ty v P4 mě nepřesvědčily. Pro Git mluví komunita a nástroje jako například gerrit.

      Vymazat
  3. S P4 se momentalne setkavam uz na druhem projektu. Celkem jsem se s nim uz naucil zit a tvuj typicky lifecycle je naprosto shodny s tim mym. Po urcite dobe jsem si celkem oblibil merge/integrate mezi streamy, nemam z toho takovy bolehlav jako u SVN a mergovani mezi branches.

    Co ale stale zkoumam je rozumna prace se Shelve. Dobre to funguje u souboru, ktere uz v P4 maji svou verzi. Ovsem kdyz pridam nejake lokalni soubory, ktere v P4 jeste nejsou, jaksi nejdou z podstaty P4 odlozit stranou - shelvnout. Coz je obcas problem, kdyz pridam nejakou java tridu, pak ji chci odlozit stranou - trida mi zustane na filesystemu. Jediny zpusob na ktery jsem prisel (a nasel +- v dokumentaci) je vytvorit si novy workspace a zmenit ownership changelistu na nej. To mi ale prijde trochu pres ruku a ocekaval bych tuto funkcionalitu vyresenou outofthebox u Shelve.

    OdpovědětVymazat
    Odpovědi
    1. Propagování změn mezi streamy a vůbec koncept streamů se mi na P4 hodně líbí.

      Na ten problém se shelvování nových souborů jsem nenarazil, ale když nad tím tak přemýšlím, tak jsem asi vždycky shelvoval zaverzované soubory. Vlastně jsem to spíš používal jako takové drobné kvazi-branchování (a ne moc často).

      Vymazat
  4. Pro GITaře - http://www.perforce.com/product/components/git-fusion. Zatím nevím jak moc to funguje, snažím se přesvědčit zákazníka, aby to nasadil.

    Osobně používám git-p4 na každodenní práci programátora. Pokud potřebuji mergovat, hledat v hostorii (time-lapse view je killing feature) či něco podobného, zapínám p4v - je to sice složité jak parní mlátička, ale tak kvalitní nástroj na tento typ úloh jsem zatím nepotkal.

    OdpovědětVymazat
    Odpovědi
    1. Ten git-p4 vypadá zajímavě.

      Obecně, rád používám VCS z příkazové řádky, ale p4 mi přišlo moc "pracný", tak jsem (spokojeně) používal P4V.

      Vymazat