k47.cz  — každý den dokud se vám to nezačne líbit
výběr foto Praha povídky kultura
TECH ▞▞ kolo | twitter RSS

Verzovací systémy a spisovatelé

9. 3. 2011 — k47 (CC by-nc-sa) (♪)

Ver­zo­vání je fajn!

Je­li­kož jsem tak trochu pro­gra­má­tor, stydím se, že jsem do ver­zo­va­cích sys­témů pro­nikl re­la­tivně ne­dávno. Obět­ním be­rán­kem se v mém pří­padě stal Git – dítko Linuse Tor­valds, které se stará (mimo jiné) o správu a ver­zo­vání zdro­jáků li­nu­xo­vého jádra.


Ver­zo­vací sys­témy? Sys­témy správy verzí? O co jde? Velice krátce:

Ver­zo­vací sys­témy jsou ver­zo­vací, pro­tože ucho­vá­vají jed­not­livé verze vašeho pro­jektu v čase. Vy­tváří jakési snímky toho, jak pro­jekt vy­pa­dal, když byl tzv. com­mit­nut. Člověk se v nic může vracet zpátky, dívat se, co se kde změ­nilo a také kdo to změnil (aby bylo na koho na­dá­vat), můžete přejít ke starší verzi, když zjistí, že no­vinky ne­fun­gují, tu novou za­ho­dit a po­kra­čo­vat v práci od bez­peč­ného bodu his­to­rie. Také jsou zcela zá­sadní pro spo­lu­práci vět­šího počtu lidí na jednom pro­jektu.

Exis­tují dva typy: cen­t­ra­li­zo­vané a de­cen­t­ra­li­zo­vané (dis­tri­bu­o­vané). U těch prv­ních je nějaký hlavní server (může to být klidně váš po­čí­tač), který ucho­vává his­to­rii změn pro­jektu. Když chci na daném pro­jektu pra­co­vat, musím se při­po­jit k cen­t­rál­nímu ser­veru, abych mohl stáh­nout nej­no­vější verzi nebo nahrát svojí práci. De­cen­t­ra­li­zo­vané žádný ta­ko­výto středo­bod nemají a každý, kdo se na pro­jektu podílí má u sebe celou his­to­rii změn.

Git patří mezi dis­tri­bu­o­vané sys­témy.


A jak se to hodí pro spi­so­va­tele? Asi takhle přá­telé: ver­zo­vání se hodí všude, kde něco vzniká a pro­chází po­stup­ným pro­ce­sem změn. Kupří­kladu psaní aspoň trochu delší po­vídky/novely/románu. Píšu, píšu, píšu, pak se vrátím zpátky, čtu si to po sobě a chci pro­vést ně­ja­kou změnu, na­pří­klad smazat ně­ja­kou pasáž. Je to dobrý nápad? Co když se bude dát při­le­pit někam jinam? Co když jí budu poz­ději po­tře­bo­vat? Co když? Co když? Plus člověk se může uk­lepnout a něco omylem smazat. Moje ob­lí­bená klá­ve­sová zkratka edi­toru Gedit Ctrl-D, která smaže celý řádek, je stra­te­gicky umís­těna vedle uklá­da­jí­cího Ctrl-S. Žádný z těchto pro­blémů vás nemusí trápit, když budete po­u­ží­vat ver­zo­vací systém, který sle­duje změny a ukládá si prů­běžně (tedy přes­něji řečeno, jenom když mu to na­ká­žete) stav pro­jektu (což je jed­no­duše nějaká složka + její obsah) a může se k li­bo­vol­nému stavu vrátit.

Kdy­bych Git po­u­ží­val od za­čátku a po­stupně ver­zo­val celou Ter­mi­na­litu, mohl bych zjis­tit, jak po­stupně vzni­kala a kdy jsem psal jaké pasáže (dneska mám z nej­star­ších částí da­to­vané jenom 3 frag­menty).

A pak je také zá­bavné sle­do­vat jak se pro­gram nebo dílo po­stupně vyvíjí a mění. Už třeba jed­no­du­chý gra­fický klient Gitu gitk pře­hledně ukáže rozdíl sou­borů mezi dvěma ver­zemi. Pro li­te­rární díla se tato jed­no­du­chá vi­zu­a­li­zace změn bude hodit jenom když píšete do pla­in­textu – čis­tého tex­to­vého sou­boru v edi­to­rech jako Gedit, Kate nebo No­te­pad; nikoli ve Wordu nebo Open Office Wri­teru, ty po­u­ží­vají slo­žitý bi­nární formát, který se do podoby či­telné pro člo­věka pře­vádí kom­pli­ko­va­nou pro­cedu­rou. Tady vám git řekne, že se daný soubor nějak změnil, ale ne­u­káže vám, co se v něm změ­nilo, pro­tože by jeho in­ter­pre­tace ne­dá­vala smysl (prostě by před vás vy­sy­pal něco jako hex dump).

Výhody ver­zo­vání jsou zjevné: ne­mu­sím si dělat sta­rosti a roz­mýš­let se, než něco smažu, zá­sadně změním, upra­vím nebo pře­kopu. Pokud před a po každé větší změně pro­vedu commit, můžu se ke kte­ré­mu­koli takto za­chy­ce­nému stavu zase vrátit a to je hodně velký rozdíl pra­cov­ním po­stupu. Ver­zo­vání se dá také využít k zá­lo­ho­vání – stačí zko­pí­ro­vat jednu složku a táh­nete si s sebou nejen sou­časný stav, ale i celou his­to­rii všech změn. Můžete si na jiném po­čí­tači v síti za­lo­žit prázdný Git pro­jekt a do něj jedním pří­ka­zem pře­táh­nout všechny sou­bory a jejich his­to­rii. Při dalším pře­ta­žení se nebude ko­pí­ro­vat všechno znovu, ale jenom změny v sou­bo­rech. Pravda, Git není pri­márně určen na zá­lo­ho­vání, ale dá se tak taky použít.

Dalším možným pří­no­sem pro spi­so­va­tele je mož­nost spo­lu­práce více autorů na jednom textu. Na­pří­klad můžete někomu dát pří­stup ke svého stromu, on si ho stáhne k sobě a pak můžete psát spo­lečně nebo on začne kon­t­ro­lo­vat pře­klepy, opra­vo­vat ne­ob­ratné věty, psát po­známky, pro­vá­dět beta rea­ding a vy si od něj prů­běžně budete pře­ta­ho­vat vý­sledky jeho práce a za­čle­níte je do svého díla. Přitom oba můžete pra­co­vat na jednom textu sou­časně, on kon­t­ro­luje za­čá­tek, vy píšete další ka­pi­toly, jiný autor do­pi­suje do­prostřed chy­bě­jící část, ne­mu­síte na nikoho čekat, abyste mohli pra­co­vat dál.

Teď mě napadá, že by se takhle dal uspo­řá­dat spi­so­va­tel­ský ma­ra­ton. Sešlo by se ně­ko­lik kre­a­tiv­ních duší s no­te­booky, na­in­sta­lo­val a na­sta­vil by se Git, nějaký po­ho­dlný pla­in­tex­tový editor a zábava by mohla začít.


PS: Právě pomocí Gitu jsem zjis­til, že tenhle článek jsem začal psát 12. října 2009 :).

píše k47 & hosté, ascii@k47.cz