# Git (software)

Git is een gedistribueerd versiebeheersysteem. Het is vrije software en wordt ook wel een softwarebroncode-managementproject genoemd. De nadruk ligt op snelheid. Git is oorspronkelijk gemaakt door Linus Torvalds voor de ontwikkeling van de Linuxkernel.
Iedere Git-werkmap bevat de volledige repository met een compleet historisch overzicht en volledige trackingcapaciteiten. Git is niet afhankelijk van een gemeenschappelijke locatie of een centrale server zoals het Concurrent Versions System (CVS) of Subversion (SVN).

## Geschiedenis

De ontwikkeling van Git begon naar aanleiding van de beslissing van het bedrijf BitMover om het programma BitKeeper niet langer voor vrij gebruik aan te bieden. De licenties werden teruggetrokken nadat de eigenaar van BitKeeper een ontwikkelaar had beschuldigd van reverse engineering van het BitKeeper-protocol, terwijl dit niet toegestaan was volgens de licentie. Naast de ontwikkeling van Git werd om dezelfde reden met de ontwikkeling van het versiebeheersysteem Mercurial gestart.
Nadat BitKeeper niet meer gebruikt mocht worden, wilde Torvalds een gedistribueerd versiebeheersysteem, zoals BitKeeper, maar er waren geen vrije beheersystemen die aan de prestatie-eisen voldeden van Torvalds. Torvalds stelde de volgende eisen aan een versiebeheersysteem voor de ontwikkeling van Linux:
* Neem CVS niet als voorbeeld van een versiebeheersysteem. Kies het tegenovergestelde bij twijfel.
* Ondersteuning voor een BitKeeper-achtig gedistribueerde en niet-lineaire manier van softwareontwikkeling.
* Zeer strenge beveiliging tegen datacorruptie, per ongeluk of opzettelijk.
* Zeer hoge prestatie-eisen.
Aan de eerste drie eisen voldeed alleen Monotone. Geen van de bestaande systemen voldeed aan alle vier de eisen. Direct na het uitbrengen van ontwikkelversie 2.6.12-rc2 van de Linuxkernel begon Torvalds met de ontwikkeling van een eigen systeem.
De ontwikkeling van de software begon op 3 april 2005, werd aangekondigd op 6 april en sinds 7 april werd de broncode door de software zelf beheerd. Op 29 april werd aan de prestatie-eis van Torvalds voldaan. Op 16 juni werd versie 2.6.12 van de Linuxkernel uitgebracht met behulp van Git.
Ondanks dat Git geïnspireerd is door BitKeeper, heeft Torvalds opzettelijk gekozen voor een alternatieve benadering wat leidde tot een eigen systeem. Hij ontwikkelde het systeem totdat technische gebruikers het konden gebruiken. Hij droeg het project over aan degene die een groot aandeel heeft gehad in de ontwikkeling van Git, Junio Hamano, op 26 juli 2005. Hamano bracht versie 1.0 uit op 21 december 2005 en beheert het project tot de dag van vandaag.
In eerste instantie was het een complex systeem dat bestond uit elementaire bewerkingen om versiebeheer mee te verrichten. In de loop van de tijd ontstond er andere software om het gebruik van Git te vereenvoudigen, zoals Cogito. Later is de functionaliteit van Cogito geïntegreerd in Git zelf waardoor de noodzaak voor dit soort software verviel.
Git is zeer sterk gebaseerd op Unix-filosofie (vrij vertaald: doe één ding en doe dat goed) en is hierdoor zeer afhankelijk van andere Unix-programma's zoals diff en patch. Dit maakt de porteerbaarheid naar bijvoorbeeld Windows lastig. Er zijn tegenwoordig echter initiatieven om Gitfunctionaliteit in Java of C# opnieuw te implementeren waardoor de afhankelijkheid van deze software vervalt.

## Gebruikswijze

Git verschilt enigszins van centrale versiebeheersystemen zoals Subversion (SVN). Bij centrale versiebeheersystemen worden revisies standaard geüpload naar een server wanneer een nieuwe versie ingediend wordt door een deelnemer. Bij Git daarentegen worden nieuwe versies ingediend in een lokale kopie van de opslagplaats wanneer een deelnemer aanpassingen heeft gemaakt. Op elk gewenst moment kan deze lokale opslagplaats gesynchroniseerd worden met de server. Het voordeel hiervan is dat nieuwe revisies ingediend kunnen worden, zelfs als er geen internetverbinding beschikbaar is, terwijl voor centrale versiebeheersystemen altijd een verbinding nodig is met de server.
Het nadeel hiervan is dat meerdere deelnemers op eenzelfde revisie kunnen zitten, die onderling verschillen. Twee gebruikers kunnen op hetzelfde moment hun lokale kopieën synchroniseren met de server, en aanpassingen maken. Wanneer ze dat gedaan hebben, en een of meerdere keren hun werk ingediend hebben bij hun lokale kopie, kunnen er conflicten ontstaan aangezien de gebruikers niet dezelfde aanpassingen gemaakt hebben. Een van de gebruikers zou vervolgens zijn kopie kunnen synchroniseren, stel naar revisie 15, terwijl zijn mede-deelnemer niet zo vaak een nieuwe versie ingediend heeft, en nog bij revisie 13 zit. Als die gebruiker zijn kopie synchroniseert met de server, zal hij conflicten moeten oplossen. Hiermee is echter rekening gehouden in de Git-software.