# Git

Git Linus Torvaldsek garatutako bertsio-kontrol software bat da; hain zuzen, produktu edo konfigurazio batean egin daitezkeen aldaketak kudeatzeko programa da. Linusen helburu nagusiak mantentze-lanen fidagarritasuna eta efizientzia ziren. Git garatzerako orduan, kontuan izan zuen programa horietan egingo ziren aldaketak artxibo askokoak izango zirela.
Hasierako ideia zen Git maila baxuko motore bat izatea, beste developer batzuek hori erabiliz aplikazio grafikoak sor zezaten, Cogito edo StGITen antzera. Hala ere, funtzionaltasunari dagokionez, erabateko sistema-kontrol bat bilakatu da. Indar handiko proiektu askotan erabiltzen da Git softwarea, Linuxen garapen nukleoan esate baterako. Gaur egungo software honen mantentze-lanak Junio Hamanoren esku daude. Horretarako, 280 programatzaileren laguntza du.

## Ezaugarriak

BitKeeper eta Monotonen oinarritutako diseinua dauka Gitek.
Giten diseinua Linus Torvaldsek Linux garatzean izandako esperientziaren emaitza da; kode mordoa jende askoren artean banatuta, kudeatuta eta mantenduta dago, helburua delarik sistemaren funtzionamendu azkarra.
Ezaugarri garrantzitsuenetakoen artean, honako hauek aurki ditzakegu:
* Garapen ez lineala bultzatzen du, adarren kudeaketa azkar baten bidez, eta bertsioen arteko nahasketak ahalbidetzen ditu. Garapen ez-lineala nola doan ikusteko tresna multzo bat ere badu. Programatzaileak aldaketak berrikusten doazen heinean, aldaketak gehitzen joaten dira.
* Banatutako gestioa. Gitek programatzaile bakoitzari kopia lokal bat sortzen dio, garapenaren historia osoarekin. Aldaketak adarretan banatzen dira, eta adarrak modu lokalean gordetzen; adar lokaleko aldaketak ere urruneko zerbitzarietan erregistratzen dira.
* Subversion eta svk errepositorioak zuzenean erabil daitezke git-svnrekin.
* Proiektu handien kudeaketan efizientzia lortzen da artxiboen arteko ezberdintasunak artxiboan bertan adierazten, beste onura batzuen artean.
* Izen aldaketak fitxategien arteko berdintasunean oinarritzen dira, marka berezirik egin gabe. Honek konfusio asko ekiditen ditu.
* Automatikoki, behar den heinean fitxategi berriak sortu eta bertan gordetzen dira datuak. Nahiz eta irakurketarako ez den oso eraginkorra, kontrakoa da idazteko orduan.

## Historia

Git-en garapena 2005eko apirilean hasi zen, Linux kernel-aren garatzaileek BitKeeper erabiltzeari laga ondoren. Larry McVoyk, BitKeeperreko copyrightaren jabe zenak, doako lizentzia ukatu zien, itxura denez, Andrew Tridgellek alderantzizko-ingeniaritza aplikatu baitzien BitKeeper protokoloei.
Linusek BitKeeperren antzera erabili zitekeen sistema bat nahi zuen, baina orduko software askedun sistemek ez zituzten bere beharrak betetzen, errendimenduaren atalean batez ere. Torvaldsek iturburu-kontrol sistema bat jarri zuen eredutzat, non patch bat jarriz, eta berarekin batera doan metadata guztia eguneratzen 30 segundo ematen dituen, eta nahiz eta proiektu itzela izan (Linuxeko kernela, esaterako), denbora mantentzen den. Hau betetzeko, patching lanek 3 segundo baino gutxiago iraun beharko luketela zehaztu zuen, eta hiru sententzia gehiago gehitu zituen:
* Concurrent versions system egin behar ez denaren eredutzat hartzea: zalantzarik egonez gero, aurkakoa egin.
* Jasatea BitKeeper-lako lan-fluxu banatua.
* Jagole boteretsuak erabili nahita edo nahigabe gertatutako datu hondaketen aurka.
Irizpide hauek orduko bertsio-kontrol sistema oro kanporatu zuen, Monotone izan ezik. Errendimendu eskaerak hori ere alde batera utzi zuen, beraz, 2.6.12-rc2 Linux kernelaren release bertsioa atera ostean, Torvaldsek bere sistema idazteari ekin zion.
2005eko apirilaren 3an hasi zen garapena. Torvaldsek apirilaren 6an iragarri zuen, eta hurrengo egunean Giten garapenaren bertsio-kontrola Git bera erabiliz egiten hasi zen. 18an lehenengo merge anitza egin zen, eta 29rako bere errendimendu beharrak betetzen zituen, segundoko 6.7 Linux kerneleko atal pathceatuz. Ekainak 16an Linux kernelaren 2.6.12 releasea Gitek kudeatu zuen.
2005eko uztailak 26an, Junio Hamanoren (proiektuko ekarle nagusitako baten) eskuetan utzi zituen mantentze lanak Torvaldsek. Bera izan zen 1.0 bertsioa argitaratzearen arduraduna urte bereko abenduaren 21ean. Gaur egun, bera da mantentze lanen arduraduna.

## Oinarrizko komandoak

Urruneko fitxategi-sisteman egindako aldaketak deskargatzen ditu.
Adar batean egindako aldaketak adar lokalean aplikatzeko erabilia.
Aurreko bi komandoak bateratzen ditu, fitxategi-sistemako adar bat lokalean deskargatuz eta aldaketak aplikatuz.
Egindako aldaketak erreferentziako adarrean aplikatzen dira, pull eginda adar bera duten beste erabiltzaileek eskuratzeko.
Commitatzean mezu bat jartzen da, eta aplikatutako aldaketak azaltzen dira.
Adar lokala urruneko zerbitzarira igotzeko balio du.
Adaren egoera zein den ikusteko balio du.
Artxiboa git sistemara gehitzen da. Hurrengo commitean zerbitzarira igoko da.
Adar lokaleko aldaketak dituen adar berri bat sortzen da.
Urrunean dagoen adar baten kopia lokala sortzen da, eta horretan parte hartzen edo honen jarraipena ahalbidetzen du.
Adar lokal guztiak bistaratzen ditu.
Adar lokalak zein erremotoak bistaratzen ditu.
Adar lokala ezabatzen du.
Adar baten aldaketak commitatzen ditu.
Urruneko errepositorioa eguneratzen du.
Egindako aldaketak commitatu ez badira, desegin egiten ditu.
Egindako commit baten aldaketak desegiten ditu, commita egin ez balitz bezela.

## Erabilera egokiak

Erabiltzaile bakoitzak nahi bezala erabil dezake software hau, hala ere, erabilera egokia honako hau da:
Master:
Adar nagusia da. Erabiltzailearen esku dagoen programa baten errepositorioari deritzo. Beraz, bertsio egonkor bat izan behar da.
Development:
Adar nagusitik ateratako bigarren bat da. Integrazio adar bat da, funtzionaltasun berri guztiak bertan integratuko dira.
Features:
Funtzionaltasun berri bakoitzarekiko adar espezifiko bat sortzen da. Hauek development adar batetik garatutakoak izango dira. Behin funtzionaltasuna garatuta, bestearekin integratzeko development adarrarekiko merge bat egingo da.
Hotfix:
Horfix-ak programa garatzerako orduan sortzen diren bug-ak, masterretik ateratako adarrak dira. Horiek lehenbailehen argitaratu eta ondoren konpondu behar dira sor ditzaketen arazoengatik. Behin arazoa konponduta, master adarrarekiko merge bat egin behar da. Azkenik, eguneratuta mantentzeko master adarra development adarrarekiko merge bat egin behar da.

## Kanpo estekak

* Datuak: Q186055
* Multimedia: Git / Q186055