Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

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í • Prerekvizity • Interní struktura

    gitu • Přepisování historie • Záchrana ztracených commitů
  2. 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.”
  3. 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.
  4. 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) { // ... } }
  5. Datové struktury • Různé vlastnosti • Pole ◦ Linked list

    ◦ Array list • Mapa ◦ Hashmap • … • Ovlivňují vlastnosti algoritmů, které je využívají $array = []; $map = [];
  6. Datové struktury: Grafy • Hrany spojují vrcholy • Orientovaný /

    neorientovaný • Ohodnocený / neohodnocený • Reprezentace grafu ◦ Matice ◦ Seznam následníků ◦ Seznam předchůdců ◦ …
  7. Neměnná (immutable) datová struktura class Node { /** @var Node

    */ private $children = []; __construct(array $children); getChildren(): array; }
  8. 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
  9. 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
  10. 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
  11. 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 <keyid>, --local-user=<keyid> Make a GPG-signed tag, using the given key.
  12. 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
  13. 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