Git

Wikipediasta
Siirry navigaatioon Siirry hakuun
Git
Git-logo.svg
Git session.svg
Luoja Linus Torvalds
Kehittäjä Linus Torvalds,
Junio Hamano
Kehityshistoria
Ensijulkaisu 7. huhtikuuta 2005
Vakaa versio 2.24 ()[1]
Kehitystilanne Aktiivinen
Tiedot
Ohjelmistotyyppi Versionhallinta
Alusta Linux, macOS, POSIX, Solaris, Windows
Ohjelmointikielet C, Bourne Shell, Perl, TCL[2]
Lisenssi GPLv2,[3] LGPL
Aiheesta muualla
git-scm.com
Versiohallinta

Git on hajautettu versionhallintajärjestelmä, joka on suunniteltu toimimaan tehokkaasti ja luotettavasti.[4][5]

Git on suunniteltu POSIX-yhteensopiville käyttöjärjestelmille (mukaan lukien Linux ja macOS). Se toimii myös Microsoft Windowsilla; virallinen asennuspaketti perustuu MinGW MSYSiin ja sisältää myös tyypillisiä POSIX-ympäristöjen apuohjelmia, kuten Bash-komentotulkin ja OpenSSH-asiakasohjelman. Git voidaan asentaa Windowsiin myös Cygwin-järjestelmän osana. Unix-suunnittelufilosofian mukaisesti Git ei ole yksittäinen sovellusohjelma, vaan koostuu suuresta joukosta pienempiä sovelluksia, joista kukin toteuttaa yksittäisiä toimintoja.

Gitin sanotaan olevan kolmannen sukupolven versionhallintajärjestelmä, joka toimii hajautetusti ja seuraa muutosjoukkoja.[6] Muita vastaavia versionhallintajärjestelmiä ovat Mercurial ja GNU Bazaar.[6]

Gitin alkuperäinen kehittäjä Linus Torvalds kertoo hajautetun järjestelmän eduksi, että politikointi käyttäjäoikeuksista poistuu: jokaisella käyttäjällä on oma tietovarasto (engl. repository).[7] Kehityshetkellä olemassa olleissa muissa järjestelmissä oli omat ongelmansa kuten tiedostojen uudelleennimeämisen seuranta ja suorituskyky.[7] Hajautettu mahdollistaa myös helpot ja luotettavat varmuuskopiot ja henkilökohtaisten kokeellisten tietovarastojen käytön.[7] Aiemmissa järjestelmissä muutoksien yhdistämien (engl. merge) oli monimutkainen operaatio.[7]

Historia[muokkaa | muokkaa wikitekstiä]

Linux-ytimen versionhallintaan käytettiin vuonna 2002 käyttöön otettua BitMoverin suljetun lähdekoodin BitKeeper-ohjelmistoa.[8] BitMover antoi BitKeeperin ilmaiseen käyttöön avoimen lähdekoodin projekteille, mutta sen ehtoja ja ratkaisua kritisoitiin.[8][7] BitKeeper käytti hajautettua mallia, joka inspiroi projekteja kuten GNU Arch, Darcs ja Monotone.[8]

Vuonna 2005 Andrew Tridgell pyrki tekemään BitKeeperiä käyttävän ohjelman takaisinmallinnuksella, joka oli vastoin BitKeeperin käyttöehtoja.[7] Torvalds yritti sovitella Tridgellin ja BitMoverin Larry McVoyn välillä, mutta päättivät lopettaa BitKeeperin käytön.[7][9] Katsottuaan vaihtoehtoja Torvalds päätti kirjoittaa oman hajautetun versionhallintajärjestelmän korvaajaksi, koska Linux-ytimen kehitystiimin tarpeet täyttävää avoimen lähdekoodin järjestelmää ei tuolloin ollut olemassa.[7][10]

Torvalds inhosi keskitettyä mallia kuten Subversionissa ja kehotti katsomaan vaihtoehtoja kuten Monotonea.[11][12] Torvalds kritisoi Monotonea eräistä seikoista kuten tavasta käyttää "tietokanta per kehittäjä" -mallia eikä "tietokanta per lähdekoodipuu" -mallia.[13][14] Myös Monotonen suorituskyky oli yksi vaikuttava tekijä: suorituskyky oli yksi keskeisistä vaatimuksista ja Monotone oli huomattavan hidas Linux-ytimen tiedostomäärällä.[13][8][15]

Torvalds kertoo aloittaneensa Gitin kehityksen 3. huhtikuuta 2005 viimeisen BitKeeperillä tehdyn ytimen version 2.6.12-rc2 julkaisun jälkeen.[16] Itseään tukeva (engl. self-hosting) Gitistä tuli noin päivässä: suuri osa kehitystyöstä ei ollut ohjelmakoodin kirjoittamista vaan tietojen käsittelyn suunnittelua.[7] Itseään tukevana pidetään kuitenkin 7. huhtikuuta tehtyä tallennusta.[17] Ensimmäinen muutoksien yhdistäminen Linux-ytimeen Gitillä tapahtui 17. huhtikuuta 2005.[18] Torvalds on kertonut, että koska on käyttänyt BitKeeperiä pitkään toimintamalli vain seuraisi BitKeeperin mallia eikä sen teknisiä yksityiskohtia: Torvalds tietoisesti pyrki välttämäään BitKeeperin kloonin tekemistä.[19][10]

”Git” tarkoittaa brittiläisessä slangissa ”ääliötä”; Linus Torvalds sanoi ”Olen itsekeskeinen paskiainen, joten nimeän kaikki projektit itseni mukaan. Ensin Linux, nyt git.” (”I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.”). Kehityksen alkuvaiheissa nimeä kuvailtiin seuraavasti:[20]

»Linus Torvalds nimesi ohjelmiston ”gitiksi” kun hän loi ensimmäisen version. Hänen mukaansa kyseessä on ”tyhmä sisällönseurantaohjelmisto”, jota voidaan kuvailla mieltymysten mukaan:

  • Satunnainen äännettävissä oleva kolmikirjaiminen nimi, jota olemassa oleva Unix-ohjelma ei käytä. Se, että se voidaan virheellisesti lausua kuten ”get”, on ehkä asiaan kuuluvaa.
  • Tyhmä. Halveksittava ja kamala. Yksinkertainen. Valitse suosikkisi slangisanakirjasta.
  • ”Globaali Informaatio-Trakkeri”: Kun olet hyvillä mielin ja se sattuu toimimaan. Enkelikuoro laulaa ja valo täyttää huoneen.
  • ”Goddamn Idiotic Truckload of sh*t”: Kun se ei toimi.»

Torvalds ilmoitti 27. heinäkuuta 2005 Gitin ylläpidon siirtymisestä Junio Hamanolle, joka oli innokas kehittäjä.[21][8]

Varhaiset Git-komennot olivat vaikeaselkoisia, jotka kehittyivät Hamanon kehittäessä työkaluja.[7][8]

Erityisominaisuudet[muokkaa | muokkaa wikitekstiä]

Gitin 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. Käyttöliittymänsä puolesta Git on suunniteltu Unixin periaatteiden mukaiseksi ”työkalusarjaksi”; Git on oikeastaan joukko ohjelmia, joista kukin tekee yhden tietyn asian hyvin.

Tiedostojen uudelleennimeäminen Gitissä on ns. implisiittistä (eksplisiittisen sijaan). 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ä (vähän kuin tiedostojärjestelmistä tutun inoden). Git ei käytä tämänkaltaisia tunnisteita,[22][23] sillä koodia joudutaan välillä paloittelemaan tai yhdistelemään uudelleennimeämisen lisäksi.[24] 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ä.[25] (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).[26]

Git eroaa useimmista versionhallintajärjestelmistä seuraamalla tilannekuvia (engl. snapshot) yksittäisten tiedostojen erojen (delta) sijaan.[27] Gitissä lähes jokainen operaatio on paikallinen: tämä mahdollistaa työskentelyn myös ilman jatkuvaa verkkoyhteyttä.[27] 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.[27]

Torvaldsin mukaan ajatus sisällönosoittamistekniikasta on lainattu Monotonesta.[15][17]

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".[14]

GVFS[muokkaa | muokkaa wikitekstiä]

Microsoft on julkaissut Git Virtual File System (GVFS) -projektin laajojen projektien hallintaan.[28][29] GVFS mahdollistaa osan lähdekoodeista näkyvän virtuaalisesti osana tietovarastoa (repository) varsinaisen latauksen tapahtuessa kun tiedostoa tarvitsee käsitellä.[28]

SHA-1[muokkaa | muokkaa wikitekstiä]

Git käyttää nykyisin SHA-1-tiivistefunktiota tiedostojen seurantaan.[30] Siirtyminen uudempaan standardiin on työn alla.[30]

Käyttäjäoikeudet[muokkaa | muokkaa wikitekstiä]

Git ei itse käsittele käyttäjäoikeuksia, vaan siihen käytetään olemassaolevia työkaluja kuten SSH, tiedostojärjestelmän asetukset, käyttäjäoikeuslistat (ACL) ja muita tekniikoita.[31]

Ohjelmistotuki[muokkaa | muokkaa wikitekstiä]

Git integroituu useisiin ohjelmointiympäristöihin.[32][33][34]

Microsoftin Visual Studio -kehitysympäristössä on tuki Git-versionhallinnalle.[35]

Gitille on tehty useita graafisen käyttöliittymän sovelluksia.[36] Gitille on tehty myös SQL-rajapinta.[37]

Käyttö[muokkaa | muokkaa wikitekstiä]

Eclipse Foundationin mukaan Git oli käyttäjäyhteisössä tehdyn kyselyn perusteella suosituin versionhallintajärjestelmä vuonna 2014.[38] RhodeCoden mukaan Git oli vuonna 2016 usealla eri mittaustavalla selkeästi suosituin versionhallintajärjestelmä.[39]

Gitin suosion syiksi sanotaan seuraavia:[40]

  • hajautettu periaate helpottaa toimintaa heikkojen verkkoyhteyksien kanssa, eri aikavyöhykkeillä ja joustavampi työtapa: kyky toimia useiden tietovarastojen (engl. repository) kanssa
  • haarojen ja muutosten yhdistäminen tapahtuu hetkessä ja paikallisesti sekä kyky muistaa jo yhteen liitettyjä muutoksia
  • kokoontumisalue (engl. staging) mahdollistaa useiden muutoksien kokoamisen muutosjoukoksi
  • paras markkinointikampanja: Torvaldsilla on suuri vaikutus
  • GitHub levisi harrastekäytöstä ammattikäyttöön ja lisäsi sosiaalisen median ominaisuuksia

Gitiä on alettu vuoteen 2009 mennessä hyödyntää Linuxin ohella lukuisissa korkean profiilin ohjelmistohankkeissa kuten: Perl, GNOME, Qt, Samba, Kannettava tietokone jokaiselle lapselle ja Googlen Android-käyttöjärjestelmä.

Hajautetun versionhallintajärjestelmän avulla kehitys on siirtynyt parempaan kehitysmalliin: ytimen kehitys on skaalautunut tuhansien ihmisten yhteiseen kehitystyöhön.[41]

Ars Technican mukaan Microsoft käyttää nykyisin Gitiä Windowsin lähdekoodien hallintaan.[42]

Kritiikki[muokkaa | muokkaa wikitekstiä]

Gitiä on kritisoitu vaikeudesta, jota on parannettu kehittämällä työkaluja.[7][8]

Gitin mukana tulee suuri joukko työkaluohjelmia ja komentoja, joista pieni osa riittää normaalikäytössä.[41]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. [ANNOUNCE] Git v2.24.0, (viitattu ). Arvo on haettu Wikidatasta.
  2. git github.com. Viitattu 27.2.2017.
  3. Linus Torvalds: License github.com. 17.1.2010. Viitattu 16.2.2015. (englanniksi)
  4. Linus Torvalds: Re: Kernel SCM saga.. marc.info. 7.4.2005. Viitattu 3.11.2019. (englanniksi)
  5. Linus Torvalds: Re: fatal: serious inflate inconsistency marc.info. 10.6.2007. Viitattu 3.11.2019. (englanniksi)
  6. a b A History of Version Control ericsink.com. Viitattu 23.2.2017.
  7. a b c d e f g h i j k 10 Years of Git: An Interview with Git Creator Linus Torvalds 6.4.2015. Linux Foundation. Viitattu 3.11.2019. (englanniksi)
  8. a b c d e f g Zack Brown: A Git Origin Story 27.7.2018. Linux Journal. Viitattu 6.11.2019. (englanniksi)
  9. The kernel and BitKeeper part ways lwn.net. 6.4.2005. Viitattu 6.11.2019. (englanniksi)
  10. a b Linus Torvalds: Re: VCS comparison table marc.info. 19.10.2006. Viitattu 9.11.2019. (englanniksi)
  11. Linus Torvalds: Re: Kernel SCM saga.. marc.info. 7.4.2005. Viitattu 6.11.2019. (englanniksi)
  12. Linus Torvalds: Kernel SCM saga.. marc.info. 6.4.2005. Viitattu 6.11.2019. (englanniksi)
  13. a b The Monotone version control system lwn.net. Viitattu 6.11.2019. (englanniksi)
  14. a b Linus Torvalds: Re: Kernel SCM saga.. marc.info. 7.4.2005. Viitattu 6.11.2019. (englanniksi) 
  15. a b Linus Torvalds: Re: [ANNOUNCE Git wiki] marc.info. 5.5.2006. Viitattu 9.11.2019. (englanniksi)
  16. Linus Torvalds: Re: Trivia: When did git self-host? marc.info. 27.2.2007. Viitattu 2.11.2019. (englanniksi)
  17. a b Matthew McCullough & Jon Loeliger: Chapter 1. Introduction (Version Control with Git, 2nd Edition) oreilly.com. ”Git immediately borrowed the idea from Monotone, according to Linus.” Viitattu 8.11.2019. (englanniksi)
  18. Linus Torvalds: First ever real kernel git merge! marc.info. 17.4.2005. Viitattu 2.11.2019. (englanniksi) 
  19. Linus Torvalds: Re: Mercurial 0.4b vs git patchbomb benchmark lkml.iu.edu. 29.4.2005. Viitattu 9.11.2019. (englanniksi)
  20. Initial revision of "git", the information manager from hell · git/git@e83c516 github.com. Arkistoitu 8 October 2017. Viitattu 21.1.2016.
  21. Linus Torvalds: Meet the new maintainer.. marc.info. 27.7.2005. Viitattu 2.11.2019. (englanniksi)
  22. Re: impure renames / history tracking marc.info.
  23. Re: Errors GITtifying GCC and Binutils marc.info.
  24. Re: Errors GITtifying GCC and Binutils marc.info.
  25. Re: git and bzr, on using git-blame to show code moved between source files marc.info.
  26. How do I add an empty directory to a git repository stackoverflow.com.
  27. a b c 1.3 Getting Started - What is Git? git-scm.com. Viitattu 3.11.2019. (englanniksi)
  28. a b Microsoft Announces Git Virtual File-System (GVFS) phoronix.com. Viitattu 27.2.2017.
  29. Announcing GVFS (Git Virtual File System) Microsoft. Viitattu 27.2.2017.
  30. a b Torvalds, Linus: I thought I'd write an update on git and SHA1.. plus.google.com. Viitattu 27.2.2017.
  31. Git repository access control wincent.com. 22.2.2010. Viitattu 8.11.2019. (englanniksi)
  32. https://projects.eclipse.org/projects/technology.egit
  33. https://netbeans.org/kb/docs/ide/git.html
  34. https://www.jetbrains.com/help/idea/using-git-integration.html
  35. DevOps - Commit to Git: Source Control in Visual Studio 2015 Microsoft. Viitattu 27.2.2017.
  36. GUI Clients git-scm.com. Viitattu 6.11.2019. (englanniksi)
  37. https://github.com/src-d/gitbase
  38. Ian Skerrett: Eclipse Community Survey 2014 Results ianskerrett.wordpress.com. Viitattu 6.11.2019. (englanniksi)
  39. Version Control Systems Popularity in 2016 rhodecode.com. Viitattu 2.11.2019. (englanniksi)
  40. The impact of Git on software development codacy.com. 6.4.2018. Viitattu 2.11.2019. (englanniksi)
  41. a b Marti, Don: Linus on Linux: The Linus Torvalds Interview Part 2 ("Linus talks about the process of managing kernel developer commits, selecting a revision control system and how he personally uses git.") Linux Magazine. 26.4.2009. Arkistoitu . Viitattu 28.4.2009. (englanniksi)
  42. Microsoft hosts the Windows source in a monstrous 300GB Git repository Ars Technica. Viitattu 21.2.2017.

Katso myös[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]