Git
Erityisominaisuudet

Git suunniteltiin olemaan mahdollisimman nopea (Linux-ytimeen tulee valtava määrä muutoksia), tukemaan hajautettua työskentelyä, ja estämään datan virheellisyys sekä katoaminen. Sen oli myös kyettävä hallitsemaan Linuxin valtavaa kokoluokkaa, toisin kuin monet muut järjestelmät, jotka eivät skaalaudu isojen hakemistopuiden hallintaan. Git suunniteltiin myös eri kehityshaarojen tehokkaaseen ja helppoon hyödyntämiseen.
Git on suunniteltu Unix-filosofian mukaiseksi ”työkalusarjaksi”: Gitissä on joukko ohjelmia, joista kukin tekee yhden tietyn asian hyvin.
Useimmissa muissa versionhallintajärjestelmissä on seurattu Source Code Control Systemin (SCCS) ”ajatusmallia”: niissä eräät toiminnot ovat olleet rivikohtaisella toiminnolla ja ylemmän tason ”näkymä” on puuttunut. Gitissä blame-toiminto on laajempi ja annotate taaksepäin yhteensopivuuden vuoksi muista järjestelmistä tulevia varten.
Tiedostojen uudelleennimeäminen Gitissä on implisiittistä: sitä ei nimenomaisesti seurata vaan se tulee ”automaattisesti”. Vanhemman CVS:n yleisenä heikkoutena pidetään sen tapaa tunnistaa koko päivityshistoria tiedoston nimen mukaan, jolloin tiedoston siirtäminen tai uudelleennimeäminen ei ole mahdollista joko keskeyttämättä tai uudelleennimeämättä sen historiaa, tehden siitä virheellistä. Useimmat uudemmat versionhallintajärjestelmät antavat tiedostoille oman pysyvän nimensä (tiedostojärjestelmissä käytetyn ”inoden” kaltaisen). Git ei käytä tämänkaltaisia tunnisteita, sillä koodia joudutaan välillä paloittelemaan tai yhdistelemään uudelleennimeämisen lisäksi. Tämän ylöskirjaaminen pelkkänä uudelleennimeämisenä jäädyttäisi historian jälleen virheelliseksi, mistä johtuen Git tunnistaa uudelleennimeämiset automaattisesti tallennehistoriaa selaamalla sen sijaan, että se kirjattaisiin jo tallennushetkellä. (Yksinkertaistettuna version N jokin tiedosto on uudempi kuin N-1:n. Kun N-1:stä ei löydy kyseisen nimistä tiedostoa, Git etsii tiedostoa joka löytyy vain tästä versiosta, ja on sisällöltään mahdollisimman samanlainen uudempaan verrattuna.) Tämä vaatii kuitenkin luonnollisesti enemmän säikeitä (kuormittaen siten prosessoria) sekä monenlaisia asetuksia kontrolloimaan heuristiikkaa.
Gitin on myös päätetty olevan seuraamatta tyhjiä hakemistoja. Tästä syystä pelkkien hakemistojen seuraamiseen on kansioon luotava aina vähintään yksi tyhjä tiedosto (esim. .gitignore).
Gitissä lähes jokainen operaatio on paikallinen: tämä mahdollistaa työskentelyn myös ilman jatkuvaa verkkoyhteyttä. Paikallisen lisäksi voi käyttää jaettua verkkolevyä (kuten NFS) tai palvelinta (HTTP, SSH ja Git-protokollat). Tietovarastoon voi liittää muita tietovarastoja, joihin viitataan lyhyillä nimillä (kuten origin, joka on oletusnimi tietovarastolle, josta olet kloonannut). Esimerkiksi eri kehittäjien tietovarastoista voi hakea muutoksia omaan tietovarastoon (sekä paikallisesti että verkon kautta).
Git eroaa useimmista versionhallintajärjestelmistä seuraamalla tilannekuvia (engl. snapshot) yksittäisten tiedostojen erojen (delta) sijaan.
Gitin tietovarasto tukee useita lähdekoodipuita (worktree). Uusi lähdekoodipuu on ”linkitetty puu” eikä ”pääpuu” kuten init- tai clone-komennolla tehdessä.
Kaikelle Gitissä säilötylle lasketaan tarkistussumma SHA-1 tiivistefunktiolla jolla muutokseen viitataan: tämän johdosta on mahdotonta muuttaa minkään tiedoston sisältöä ilman että versiohallinta tietää siitä, jolloin et voi kadottaa tietoa tai menettää tietoa korruptoitumiselle.
Torvaldsin mukaan ajatus sisällönosoittamistekniikasta on lainattu Monotonesta.
Gitin käyttämä sisällönosoittaminen ja tapa säilöä tietoa objekteissa (muutostiedostojen sijaan) mahdollistaa minkä vain sisällön tallentamisen Gitissä.
Torvalds on kertonut kääntyneensä Bitkeeperin kehittäjän Larry McVoyn kannalle siinä, että ”kirsikan poimiminen” (engl. cherry picking, tiettyjen muutoksien valinta) on väärä toimintamalli, joka viittaa tiettyjen henkilöiden olevan ”ylhäällä” ja toisten ”alhaalla”: Linux-ytimen kehitys on entistä enemmän ”verkkomalli”, jossa Torvalds on vain ”keskeinen henkilö” eikä ”päällimmäinen”. Git tukee eri toimintamalleja versiohallinnassa kuten keskitetty työmalli, integraationhoitajamalli ja hyväntahtoinen diktaattorimalli, joissa muutokset etenevät yhden tai useamman tietovaraston kautta. Tiettyjen muutoksien valinta on mahdollista git cherry-pick -komennolla.