V gitu se nic neztratí

V gitu se nic neztratí

07ac3a80e69a6252140feb81b89cbb08?s=128

Filip Procházka

June 20, 2018
Tweet

Transcript

  1. V gitu se nic neztratí @ProchazkaFilip

  2. V gitu se nic neztratí • Prerekvizity • Interní struktura

    gitu • Přepisování historie • Záchrana ztracených commitů
  3. Git internals: Prerekvizity

  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.”
  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.
  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) { // ... } }
  7. Datové struktury: složitost Source: https://devwebcl.blogspot.cz/2016/12/big-o-comparison.html

  8. Datové struktury • Různé vlastnosti • Pole ◦ Linked list

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

    neorientovaný • Ohodnocený / neohodnocený • Reprezentace grafu ◦ Matice ◦ Seznam následníků ◦ Seznam předchůdců ◦ …
  10. Datové struktury: strom (typ grafu) • DAG ◦ Orientovaný ◦

    Bez kružnic ◦ Graf
  11. Neměnná (immutable) datová struktura class Node { /** @var Node

    */ private $children = []; __construct(array $children); getChildren(): array; }
  12. Neměnná (immutable) datová struktura

  13. Git internals

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

    remotes/ stash/ tags/
  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
  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
  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
  18. Interní struktura: reference Source: https://git-scm.com/book/en/v1/Git-Internals-Git-Objects

  19. Interní struktura: reference HEAD • Aktivní work tree • Obsahuje

    aktivní ref, nikoliv commit
  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 <keyid>, --local-user=<keyid> Make a GPG-signed tag, using the given key.
  21. Interní struktura: reference remotes • Git si zde ukládá poslední

    známý stav remote ref
  22. Interní struktura: packfiles • Komprimované object soubory • Rozdíly mezi

    bloby (diffy)
  23. Interní struktura: .git/index • Obsahuje všechny změny přidané přes git

    add • Obsah se commituje
  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
  25. Přepisování historie: rebase

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

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

  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
  29. None
  30. GIT: advanced GEEKYTECH https://geekyedu.cz

  31. @ProchazkaFilip