Pro Git ⬇ PDF
Pro Git · Eduspaces ·
https://eduspaces.ro/s/pro-git/capitol/s-10/?pdf=1

🔩 10. Git Internals

Interiorul lui Git: obiecte, referințe, packfile-uri, refspec, protocoale de transfer și recuperare.

nivel 1

Bază (1)

nivel 2

Aprofundare (11)

1
Content-addressable filesystem· concept · p. 420

Git este în esență un sistem de fișiere adresabil prin conținut — un depozit simplu cheie–valoare: introduci orice conținut și primești o cheie unică (SHA-1) cu care îl regăsești.

2
Plumbing commands· concept · p. 420

Comenzile de nivel jos ale lui Git, făcute pentru a fi înlănțuite în stil UNIX sau apelate din scripturi (de exemplu hash-object, cat-file).

3
Porcelain commands· concept · p. 420

Comenzile Git prietenoase pentru utilizator (commit, checkout, branch etc.), opuse comenzilor plumbing.

4
Git objects· concept · p. 421

Conținutul bazei de date Git, în directorul objects: blob-uri, arbori, commit-uri și etichete, fiecare stocat comprimat (zlib) sub SHA-1-ul conținutului.

5
Blob· obiect · p. 423

Obiectul în care Git stochează conținutul unui fișier (fără numele lui), identificat prin SHA-1-ul conținutului; corespunde aproximativ conținutului unui fișier sau unui inode.

6
Tree object· obiect · p. 423

Obiect care listează conținutul unui director: intrări cu mod, tip, nume de fișier și SHA-1-ul unui blob sau al unui subarbore; corespunde intrărilor de director din UNIX.

7
Commit object· obiect · p. 426

Obiectul pe care Git îl stochează la un commit: pointer spre arborele rădăcină al snapshot-ului, numele și e-mailul autorului, mesajul și pointeri spre părinte — zero pentru commit-ul inițial, unul pentru un commit normal, mai mulți pentru un merge.

8
Reference· referință · p. 431

Nume simplu (ref) salvat într-un fișier din .git/refs care conține un SHA-1, ca să nu folosești valoarea brută: ramuri (refs/heads), etichete (refs/tags), remotes (refs/remotes).

9
git gc· comandă · p. 436

Garbage collection: adună obiectele loose în packfile-uri, comasează packfile-urile și referințele (packed-refs) și elimină obiectele vechi neaccesibile; Git o rulează uneori automat („auto gc”).

10
Packfile· structură · p. 436

Fișier binar în care Git împachetează mai multe obiecte pentru a economisi spațiu (când sunt prea multe obiecte loose, la git gc sau la push); versiunile asemănătoare ale unui fișier se păstrează ca delta față de una completă.

11
Refspec· concept · p. 438

Specificația care arată cum se mapează referințele la fetch și push: un + opțional, apoi <src>:<dst> — tiparul referințelor de pe remote și locul unde sunt urmărite local (de exemplu +refs/heads/:refs/remotes/origin/).

nivel 3

Detaliu (9)

1
git cat-file· comandă · p. 422

Comandă plumbing care inspectează un obiect: -p afișează conținutul, -t tipul obiectului.

2
git hash-object· comandă · p. 422

Comandă plumbing care calculează cheia unică (SHA-1) a unui conținut; cu -w scrie conținutul în baza de obiecte.

3
Symbolic reference· referință · p. 432

Referință care conține un pointer către altă referință, nu un SHA-1; fișierul HEAD este de obicei o referință simbolică spre ramura curentă.

4
Tag object· obiect · p. 433

Al patrulea tip de obiect Git: seamănă cu un commit (autor, dată, mesaj, pointer), dar indică de obicei un commit, nu un arbore; este creat de etichetele anotate.

5
Delta· concept · p. 436

Diferența stocată într-un packfile între versiunile succesive ale unui fișier, în locul unei copii complete a fiecărei versiuni.

6
Loose objects· obiect · p. 436

Formatul inițial în care Git salvează obiectele pe disc: câte un fișier comprimat pentru fiecare obiect, nepus încă într-un packfile.

7
Smart protocol· protocol · p. 441

Protocolul de transfer cu un proces Git la ambele capete: la push send-pack (client) cu receive-pack (server), la fetch fetch-pack cu upload-pack, care negociază ce date trebuie trimise.

8
Data recovery· proces · p. 447

Recuperarea commit-urilor pierdute (de exemplu după un reset --hard): găsești SHA-1-ul în reflog (git reflog, git log -g) sau cu git fsck și creezi o ramură care să indice spre el.

9
git fsck· comandă · p. 449

Verifică integritatea bazei de date; cu --full arată obiectele spre care nu indică nimic („dangling”), utile pentru recuperarea unui commit pierdut.