Upgrade to Pro — share decks privately, control downloads, hide ads and more …

V gitu se nic neztratí

V gitu se nic neztratí

Filip Procházka

June 20, 2018
Tweet

More Decks by Filip Procházka

Other Decks in Technology

Transcript

  1. V gitu se nic neztratí
    @ProchazkaFilip

    View Slide

  2. V gitu se nic neztratí
    ● Prerekvizity
    ● Interní struktura gitu
    ● Přepisování historie
    ● Záchrana ztracených commitů

    View Slide

  3. Git internals:
    Prerekvizity

    View Slide

  4. Datové struktury: složitost
    “Složitost algoritmu vyjadřuje náročnost algoritmu na různé
    zdroje: dobu výpočtu, velikost paměti, počet procesorů aj.
    Podle toho rozlišujeme různé míry složitosti.”

    View Slide

  5. Datové struktury: složitost
    ● Časová složitost algoritmu je funkce, která pro každou
    velikost vstupních dat je rovna délce nejdelšího výpočtu
    na všech možných datech této velikosti. Jde o analýzu
    nejhoršího případu.
    ● Prostorová složitost algoritmu je funkce, která pro
    každou velikost vstupních dat je rovna velikosti paměti
    výpočtu zabírajícího největší paměť na všech možných
    datech této velikosti. Jde o analýzu nejhoršího případu.

    View Slide

  6. Datové struktury: složitost
    ● Iterace nad polem: O(N)
    ○ 10 prvků => 10x tělo cyklu
    ● Iterace nad dvourozměrným polem s N*M prvky je O(N*M)
    ○ 10x 10 prvků je 10^2 ~ O(n^2)
    foreach ($array as $key => $value) {
    // ...
    }
    foreach ($array as $k1 => $innerArray) {
    foreach ($innerArray as $k2 => $value) {
    // ...
    }
    }

    View Slide

  7. Datové struktury: složitost
    Source: https://devwebcl.blogspot.cz/2016/12/big-o-comparison.html

    View Slide

  8. Datové struktury
    ● Různé vlastnosti
    ● Pole
    ○ Linked list
    ○ Array list
    ● Mapa
    ○ Hashmap
    ● …
    ● Ovlivňují vlastnosti algoritmů, které je využívají
    $array = [];
    $map = [];

    View Slide

  9. Datové struktury: Grafy
    ● Hrany spojují vrcholy
    ● Orientovaný / neorientovaný
    ● Ohodnocený / neohodnocený
    ● Reprezentace grafu
    ○ Matice
    ○ Seznam následníků
    ○ Seznam předchůdců
    ○ …

    View Slide

  10. Datové struktury: strom (typ grafu)
    ● DAG
    ○ Orientovaný
    ○ Bez kružnic
    ○ Graf

    View Slide

  11. Neměnná (immutable) datová struktura
    class Node
    {
    /** @var Node */
    private $children = [];
    __construct(array $children);
    getChildren(): array;
    }

    View Slide

  12. Neměnná (immutable) datová struktura

    View Slide

  13. Git internals

    View Slide

  14. Interní struktura
    .git/
    HEAD
    config
    index
    info/
    objects/
    refs/
    heads/
    remotes/
    stash/
    tags/

    View Slide

  15. Interní struktura: objekty
    ● Ukládá “libovolné” data
    ● Dostupné pod unikátním hashem
    $ find .git/objects -type f
    .git/objects/a9/1c0342de4646d25df5a1338448
    .git/objects/a9/02ad8baad63d79e867d2ad8d83
    ...
    $ git cat-file -p a902ad8baad63d79e867d2ad8d83
    content

    View Slide

  16. Interní struktura: tree objekty
    ● Jména souborů s ref na objekty
    ● Složky s ref na tree objekty
    Source: https://git-scm.com/book/en/v1/Git-Internals-Git-Objects

    View Slide

  17. Interní struktura: commit objekty
    ● hash tree objektu
    ● hash předchozího commitu
    ● Autor & commiter
    ● Datum
    ● Commit message
    ● ….
    Source: https://git-scm.com/book/en/v1/Git-Internals-Git-Objects

    View Slide

  18. Interní struktura: reference
    Source: https://git-scm.com/book/en/v1/Git-Internals-Git-Objects

    View Slide

  19. Interní struktura: reference HEAD
    ● Aktivní work tree
    ● Obsahuje aktivní ref, nikoliv commit

    View Slide

  20. Interní struktura: reference tags
    ● Nemění se
    ● Typ: lightweight
    ○ Reference, která ukazuje na commit
    ● Typ: annotated
    ○ Git vytvoří tag objekt
    ○ Reference ukazuje na tag objekt
    git tag v1.1
    git tag -a v1.1 -m “foo”
    -a, --annotate
    Make an unsigned, annotated tag object
    -s, --sign
    Make a GPG-signed tag, using the default e-mail address’s key.
    -u , --local-user=
    Make a GPG-signed tag, using the given key.

    View Slide

  21. Interní struktura: reference remotes
    ● Git si zde ukládá poslední známý stav remote ref

    View Slide

  22. Interní struktura: packfiles
    ● Komprimované object soubory
    ● Rozdíly mezi bloby (diffy)

    View Slide

  23. Interní struktura: .git/index
    ● Obsahuje všechny změny přidané přes git add
    ● Obsah se commituje

    View Slide

  24. Interní struktura: gc
    ● git-gc
    ○ Úklid v lokálním repository
    ○ auto - pravidelný garbage collecting
    ● git-prune
    ○ Součást git-gc
    ○ Maže nepotřebné objekty v lokálním repository

    View Slide

  25. Přepisování historie:
    rebase

    View Slide

  26. Source: https://developer.atlassian.com/blog/2014/12/pull-request-merge-strategies-the-great-debate/

    View Slide

  27. Záchrana ztracených commitů:
    reflog

    View Slide

  28. Záchrana ztracených commitů
    ● git reflog
    ○ Ukládá všechny commity, kterými projde HEAD
    ● git log -g
    ○ Normální log výstup, ale pro reflog historii
    ● git fsck --full
    ○ Kontroluje integritu databáze
    ○ V kombinaci s --full vrací objekty, na které nejsou reference

    View Slide

  29. View Slide

  30. GIT: advanced
    GEEKYTECH
    https://geekyedu.cz

    View Slide

  31. @ProchazkaFilip

    View Slide