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

GIT iznutra

DaFED
March 07, 2016

GIT iznutra

DaFED#41
Speaker: Boško Pešić
GIT koristi veliki broj programera. Iz našeg iskustva, mnogo manji broj programera ga razume. Većina se zadovolji osnovnim naredbama i često je u strahu da ne pogreši ili je nezadovoljna zato što ne zna kako da postigne željeno. Na ovom predavanju ćemo pokušati da približimo osnovne koncepte GIT-a, kako on zapravo čuva podatke i radi. Sa razumevanjem dolazi udobniji i produktivniji rad.

DaFED

March 07, 2016
Tweet

More Decks by DaFED

Other Decks in Programming

Transcript

  1. Teme o kojima ćemo pričati • Grane u Git-u ◦

    Optimizacija zauzeća diska na GitHub++ • Struktura podataka, ili kako Git čuva izmene ◦ Kako sačuvati istoriju i posle promene naziva fajla
  2. Pointeri u Git-u $ cat .git/HEAD ref: refs/heads/master $ ls

    .git/refs/ heads remotes tags $ ls .git/refs/heads/ GIPS-6755 master origin pull $ cat .git/refs/heads/master ece11ff3c82fea5314b423e3b49aa94d2f9c6a27
  3. Blob $ cat pera.txt Prva linija $ git hash-object -w

    pera.txt 03a1c9450b0e3ea137253ab19791564aefbe2e93 $ ls .git/objects/03/ a1c9450b0e3ea137253ab19791564aefbe2e93 $ echo -e 'blob 12\0Prva linija' | shasum 03a1c9450b0e3ea137253ab19791564aefbe2e93 -
  4. <?php $fp = fopen('.git/objects/03/a1c9450b0e3ea137253ab19791564aefbe2e93' , 'wb'); fwrite($fp, gzcompress('blob ' .

    12 . "\0" . "Prva linija\n" , 1)); fclose($fp); Blob: PHP implementacija $ git cat-file -p 03a1c9450b0e3ea137253ab19791564aefbe2e93 Prva linija <?php $blob = '.git/objects/03/a1c9450b0e3ea137253ab19791564aefbe2e93' ; echo(gzuncompress(file_get_contents ($blob)));
  5. Tree: PHP Implementacija $ git cat-file -p ff8be3c3aad810c069b49995bd162c31bf2dadb5 100644 blob

    03a1c9450b0e3ea137253ab19791564aefbe2e93 pera.txt <?php $fp = fopen('.git/objects/ff/8be3c3aad810c069b49995bd162c31bf2dadb5' , 'wb'); $data = "100644 pera.txt" . "\0" . pack('H40', '03a1c9450b0e3ea137253ab19791564aefbe2e93' ); fwrite($fp, gzcompress( 'tree ' . strlen($data) . "\0" . $data, 1)); fclose($fp); $ git cat-file -p f997a1e4024c67663ee06eb5ec447c8f0d22c014 040000 tree d92762ccc2676e116391432e1f3e11ff33ba36e4 boutsourcing 100644 blob 03a1c9450b0e3ea137253ab19791564aefbe2e93 pera.txt
  6. Commit <?php $fp = fopen('.git/objects/ec/e11ff3c82fea5314b423e3b49aa94d2f9c6a27' , 'wb'); $data = "tree

    ff8be3c3aad810c069b49995bd162c31bf2dadb5 author Bosko Pesic <[email protected]> 1444401656 +0200 committer Bosko Pesic <[email protected]> 1444401656 +0200 Prvi komit "; fwrite($fp, gzcompress('commit ' . strlen($data) . "\0" . $data, 1)); fclose($fp);
  7. Commit s roditeljem $ git cat-file -p eb04c8c tree 1bf51c6166cfb90dc23525803c9b0af2cdf53a9b

    parent ece11ff3c82fea5314b423e3b49aa94d2f9c6a27 author Bosko Pesic <[email protected]> 1444636773 +0200 committer Bosko Pesic <[email protected]> 1444636773 +0200 Drugi komit
  8. Rename • Imena fajlova su zabeležena u tree objektima •

    Komit sa novim nazivom fajla će upućivati na nove tree objekte • Dakle, Git će znati istoriju fajla samo ako ...