https://eduspaces.ro/s/pro-git/capitol/s-1/?pdf=1
🚀 1. Getting Started
Controlul versiunilor, scurta istorie a lui Git, cele trei stări, instalarea și configurarea inițială.
Bază (10)
Sistem care înregistrează modificările unui fișier sau ale unui set de fișiere în timp, astfel încât să poți reveni ulterior la anumite versiuni.
VCS: unealta care face controlul versiunilor — readuce fișiere sau tot proiectul la o stare anterioară, compară modificările în timp, arată cine a modificat ceva și când; dacă pierzi fișiere, le poți recupera ușor.
CVCS: un singur server conține toate fișierele versionate, iar clienții extrag (check out) fișierele de acolo (CVS, Subversion, Perforce). Ușor de administrat, dar serverul central este un punct unic de eșec.
DVCS (Git, Mercurial, Darcs): clienții nu extrag doar ultimul snapshot, ci oglindesc complet depozitul, cu tot istoricul; orice clonă este o copie de rezervă completă și se pot folosi mai multe depozite la distanță.
Git își vede datele ca pe o serie de instantanee ale unui mini sistem de fișiere: la fiecare commit „fotografiază” toate fișierele și păstrează o referință la acel snapshot; fișierele nemodificate nu se stochează din nou, ci doar se leagă de versiunea identică deja stocată.
În Git totul primește o sumă de control înainte de a fi stocat și este apoi referit prin ea: nu se poate schimba conținutul unui fișier sau director fără ca Git să afle, iar coruperea datelor este detectată.
Cele trei stări principale în care pot fi fișierele în Git: modified, staged și committed; ele corespund celor trei secțiuni ale unui proiect: working tree, staging area și directorul Git.
Locul unde Git stochează metadatele și baza de obiecte a proiectului (subdirectorul .git); este partea cea mai importantă și cea care se copiază când clonezi un depozit.
Unealta care citește și setează variabilele de configurare, păstrate pe trei niveluri: sistem (--system, [path]/etc/gitconfig), utilizator (--global, ~/.gitconfig) și depozit (--local, .git/config); fiecare nivel îl suprascrie pe cel anterior. git config --list arată setările.
Primul lucru de făcut după instalare: setarea numelui și a adresei de e-mail (user.name, user.email, de obicei cu --global); fiecare commit folosește aceste informații, incluse imuabil în commit-uri.
Aprofundare (8)
VCS local: o bază de date simplă, pe calculatorul propriu, care păstrează toate modificările fișierelor; exemplul tipic este RCS. Înlocuiește obiceiul, predispus la erori, de a copia fișierele în alte directoare.
Dezavantajul principal al sistemelor centralizate: dacă serverul central cade, nimeni nu mai poate colabora sau salva versiuni; dacă discul lui se corupe fără copii de rezervă, se pierde tot istoricul.
Modul în care majoritatea celorlalte sisteme (CVS, Subversion, Perforce) stochează informația: un set de fișiere și modificările aduse fiecăruia în timp, spre deosebire de snapshot-urile lui Git.
Ciclul de bază: modifici fișiere în working tree, pui în staging doar modificările care vrei să intre în următorul commit, apoi faci commit, care stochează permanent în directorul Git snapshot-ul din staging area.
Interfața în linie de comandă a lui Git, folosită în toată cartea: singurul loc unde poți rula toate comenzile Git (interfețele grafice implementează doar o parte).
Editorul de text pe care Git îl lansează când ai de scris un mesaj (de exemplu la commit); se setează cu core.editor, altfel se folosește editorul implicit al sistemului (variabila EDITOR).
Git creează implicit ramura master la git init; din versiunea 2.28 se poate alege alt nume pentru ramura inițială (de exemplu main) cu init.defaultBranch. GitHub a trecut la main în 2020.
Trei moduri echivalente de a obține pagina de manual (manpage) a unei comenzi: git help <verb>, git <verb> --help și man git-<verb>; opțiunea -h dă un rezumat scurt al opțiunilor.
Detaliu (2)
Unul dintre cele mai populare VCS-uri locale: păstrează seturi de patch-uri (diferențele dintre fișiere) într-un format special pe disc și reface orice versiune adunând patch-urile.
DVCS proprietar folosit de proiectul nucleului Linux din 2002; după retragerea gratuității în 2005, comunitatea Linux (în special Linus Torvalds) a creat Git.
Niciun concept nu se potrivește filtrului.