# Git

Git és un programari de sistema de control de versions dissenyat per Linus Torvalds, pensat en l'eficiència i confiabilitat de manteniment de versions d'aplicacions amb una enorme quantitat de fitxers de codi font.
El disseny de Git es va basar en BitKeeper i en Monotone. En un principi, Git es va pensar com un motor de baix nivell que altres puguin emprar per escriure front end com Cogito o StGIT. Git, emperò, s'ha convertit en un sistema de control de versions amb funcionalitat plena des d'ençà. N'hi ha de molta rellevància que ja empren Git, en particular el grup de programació del nucli del sistema operatiu Linux.

## Característiques

El disseny de Git resulta de l'experiència del dissenyador de Linux, Linus Torvalds, mantenint una enorme quantitat de codi distribuïda i gestionada per molta gent, que incideix en nombrosos detalls de rendiment, i de la necessitat de rapidesa en una primera implantació.
Entre les característiques més rellevants (no necessàriament positives) es troben:
* Forta incidència en la no-linealitat dels canvis, per a la rapidesa en la gestió de ramificacions i mesclat de diferents versions.
* Gestió distribuïda. Els canvis s'importen com a ramificacions, i poden ser mesclades en la manera en què ho fa una ramificació de l'emmagatzemament en local.
* Els magatzems d'informació poden publicar-se per HTTP, FTP, SSH, rsync o mitjançant un protocol natiu, a part de ser possible emular CVS.
Gestió eficient de projectes grans, donada la rapidesa de gestió de diferències entre arxius, entre altres millores d'optimització de velocitat d'execució.
* Totes les versions prèvies a un canvi determinat, impliquen la notificació d'un canvi posterior en qualsevol d'elles a aquest canvi (denominat autenticació criptogràfica d'historial). Això existia a Monotone.
* Resulta una mica més car fer feina amb fitxers concrets enfront de projectes, el qual difereix de CVS, que fa feina basant-se en canvis de fitxer, però millora el treball amb afectacions de codi que concorren en operacions similars en diversos arxius.
* Els reanomenats es treballen basant-se en similituds entre fitxers, a part de noms de fitxers, però no es fan marques explícites de canvis de nom basant-se en suposats noms únics de nodes de sistema de fitxers, el qual evita possibles, i possiblement desastroses, coincidències de fitxers diferents en un únic nom.
* Re-emmagatzemament periòdic en paquets (fitxers). Això és relativament eficient per l'escriptura de canvis i relativament ineficient per lectura si el re-empaquetat (basant-se en diferències) no té lloc amb regularitat.
El model gràfic de GIT és un exemple de graf acíclic dirigit ( en anglès, DAG ) perquè té les següents característiques:
* Un graf és una forma de modelar objectes connectats
* Acíclic perquè el graf no conté cercles, és a dir, no existeix cap camí que comenci i acabi en el mateix node
* Dirigit perquè les arestes només poden anar en una direcció, tal com "pares" i "fills" i la relació "fill de": no es pot ser "pare" i "fill" de la mateixa persona
El graf en la seva totalitat conté la història del projecte:
* els nodes a Git són els commit ( estat a un instant determinat del projecte )
* les arestes permeten relacionar un commit amb els seus pares
* una branca es crearà si un commit té més d'un fill
* la fusió es produirà quan un commit té més d'un pare

## El nom

Sembla que Torvalds va voler fer una broma amb el nom Git (que en anglès britànic significa "persona desagradable"): "Sóc un bastard egoista, i anomeno tots els meus projectes amb el meu nom. Primer 'Linux', ara 'Git'".
A la pàgina man descriu Git com a "L'estúpid rastrejador de contingut" ("Git - The stupid content tracker", en anglès).
Al fitxer Read-me del codi font s'explica més:
   "git" pot significar qualsevol cosa, depenent del teu estat d'ànim.
   * Una combinació aleatòria de tres lletres que es pot pronunciar, i que en realitat no l'utilitza cap comanda UNIX comuna. El fet que sigui una pronunciació errònia d'"aconseguir" ("get", en anglès) pot ser o no rellevant.
   * Estúpid. Abjecte i menyspreable. Simple. Trieu el vostre diccionari d'argot.
   * "Rastreig d'informació global" ("Global Information Tracker", en anglès): estàs de bon humor i realment funciona per a tu. Els àngels canten, i de sobte una llum omple l'habitació.
   * "Maleït idiota camió carregat de m*rda" ("Goddamn idiotic truckload of sh*t", en anglès): quan es trenca.
El codi font de Git fa referència al programa com "el gestor d'informació de l'infern" ("the information manager from hell", en anglès).

## Referències

* ↑ «Git 2.35.1 Release Notes» (en anglès). [Consulta: 16 març 2022].
* ↑ «GitFaq: Why the 'Git' name?». Git.or.cz. Arxivat de l'original el 23 July 2012. [Consulta: 20 juliol 2022].
* ↑ «Git» (en anglès). Git. [Consulta: 20 juliol 2022].
* ↑ «Git/README» (en anglès). Git, 08-04-2005. [Consulta: 20 juliol 2022].
* Loeliger, Jon; McCullough, Matthew. Version Control with Git (en anglès). 2a edició. Farnham: O'Reilly, agost 2012. ISBN 978-1-4493-1638-9 [Consulta: 21 novembre 2013].

## Enllaços externs

* Git - Fast Version Control System (anglès) Pàgina oficial del git

### Tutorials

* git mini-howto - GabaWiki Arxivat 2009-07-15 a Wayback Machine. És força complet; explica sobretot el caràcter distribuït del Git.
* Tutorial de git - Viquillibres Un tutorial sobre com fer anar el Git.