Pokud upravuji nějaký dokument opakovaně a dlouhodoběji, dojdu do stavu, kdy potřebuji ukládat starší a novější verze. Mám několik vhodnějších i méně vhodnějších možností.
Nejjednodušší systém je kopie
ctrl+c pak ctrl+vZa nějakou dobu vypadá naše složka následovně:
# ls
diplomka.tex
diplomka (kopie).tex
diplomka (kopie 2).tex
...
diplomka (kopie 102).tex
a nikdo už nezjistí, jaká změna kdy nastala a kdy se mi soubor "totálně rozpadl".
Trošku chytřejší verze je přejmenovat soubor podle fáze. Postup je podobný, pouze po vytvoření
kopie použijeme f2 a připojíme k názvu vhodný suffix, například -úvod,
-implementace-pohybu, -rozbitý-skok, ...
Speciální variantou je pak suffix ve formě $index-$změna, který zachovává řazení
dokumentů chronologicky a zároveň řeší problém můžeme očekávat, co v této verzi již je obsaženo.
Stále ale vypadá náš disk dosti zmateně:
# ls
diplomka.tex
diplomka002-uvod.tex
diplomka003-podekovani.tex
...
diplomka123-proc-to-nefunguje.tex
Git je jeden z verzovacích systémů, který se hojně ujal nejen
v programátorských kruzích. Jeho funkce je jednoduchá, sleduje změny v souborovém systému a umožní
označit soubory které chceme sledovat a následně potvrdit commit připravené změny do
revizí revision. Zaznamenává údaje o změnách, historii a umožňuje i její rozvětvení.
Další velkou výhodou gitu je možnost odesílat push a příjimat pull
změny z/do vzdálených repozitářů a zjednodušuje tak spolupráci ve větších skupinách.
Nejjednodušším použitím je lokální sledování změn v gitu. Vytvořím repozitář, vytvořím soubor(y), řeknu gitu které soubory chci verzovat a pak už jen upravuji a commituji změny.
git init .git add $souborgit commit -as, git se mě zeptá na detaily změny, které následně ukazuje v historii
Ve složce vidím pouze jednu verzi mých souborů, ale použitím git log zobrazím historii,
případně git show $verze i změny od předchozí verze, git diff $verze1..$verze2
změny mezi 2 verzemi. Také se mohu vrátit k nějaké verzi pomocí git checkout $verze,
případně smazat současné změny pomocí git reset --hard $verze. Možností je mnoho,
a jakmile cokoliv zapíšu commit je velmi pravděpodobné, že se k této verzi budu moci
vrátit, ať se děje (téměř) cokoliv.
Předchozí řešení je velmi robustní, neřeší ale problém ztráty počítače (rozbití, vir, ...). Git umožňuje
nejenom změny zaznamenávat, ale i odesílat na vzdálené repozitáře repository pomocí
git push a git pull. Vzdálený repozitář může být na flash-disku, na síťovém
disku, na vzdáleném počítači, nebo v cloudu. Pro uživatele je ale vše transparentní.
git init . (případně tlačítkem na githubu/gitlabu/...git clone $cesta-k-repozitáři (například `http://nas_pocitac:8080/ja/muj_repozitar`, nebo `F:\zaloha\muj_repozitar`)git add $souborgit commit -as, git se mě zeptá na detaily změny, které následně ukazuje v historiigit push (nemusím dělat po každé změně)Předešlé řešení funguje velmi dobře pro jednoho člověka, případně menší skupinu lidí. Pokud chceme spolupracovat ve větší skupině, je vhodné využít github/gitlab či podobné nástroje, které přidávají systém oprávnění (né každý může zapisovat do mého repozitáře) a také možnost diskutovat o jednotlivých změnách.
fork.
git clone $cesta-k-repozitáři (například `http://nas_pocitac:8080/ja/muj_repozitar`, nebo `F:\zaloha\muj_repozitar`)git checkout -b $nazev_větvegit add $souborgit commit -as, git se mě zeptá na detaily změny, které následně ukazuje v historiigit pushPull Request/Merge Request na stránkách githubu/gitlabugit push --force) až jsou jednou spokojení a mou změnu přijmou merge. Od této chvíle
všichni uživatelé uvidí mou změnu na hlavních stránkách projektu.
Použití větví branch je velmi přínosné, neboť mohu pracovat na více logických změnách zároveň
a přepínat se mezi nimi pomocí git checkout $branch kdykoliv kdy mám všechny změny zaznamenány
git commit.
Vždy záleží, na čem pracujeme. Často postačí kopie souboru, ale určitě doporučuji dát gitu šanci alespoň v té nejprostší podobě ať už píšete diplomovou práci, zákon, vytváříte mód do hry, nebo píšete vlastní aplikaci. Začátek není složitý a časem můžete objevit další kouzelné funkce tohoto systému verzí.