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 *copyright*aren 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 *kernel*a, 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 *kernel*aren *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 *kernel*eko atal *pathc*eatuz. Ekainak 16an Linux *kernel*aren 2.6.12 *release*a 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 
```shell
git fetch
```
Urruneko fitxategi-sisteman egindako aldaketak deskargatzen ditu.
```shell
git merge 
```
Adar batean egindako aldaketak adar lokalean aplikatzeko erabilia.
```shell
git pull
```
Aurreko bi komandoak bateratzen ditu, fitxategi-sistemako adar bat lokalean deskargatuz eta aldaketak aplikatuz.
```shell
git commit
```
Egindako aldaketak erreferentziako adarrean aplikatzen dira, *pull* eginda adar bera duten beste erabiltzaileek eskuratzeko.
```shell
git commit -am ""
```
*Commit*atzean mezu bat jartzen da, eta aplikatutako aldaketak azaltzen dira.
```shell
git push origin 
```
Adar lokala urruneko zerbitzarira igotzeko balio du.
```shell
git status
```
Adaren egoera zein den ikusteko balio du.
```shell
git add 
```
Artxiboa git sistemara gehitzen da. Hurrengo *commit*ean zerbitzarira igoko da.
```shell
git checkout -b 
```
Adar lokaleko aldaketak dituen adar berri bat sortzen da.
```shell
git checkout -t origin/
```
Urrunean dagoen adar baten kopia lokala sortzen da, eta horretan parte hartzen edo honen jarraipena ahalbidetzen du.
```shell
git branch
```
Adar lokal guztiak bistaratzen ditu.
```shell
git branch -a
```
*Adar* lokalak zein erremotoak bistaratzen ditu.
```shell
git branch -d 
```
Adar lokala ezabatzen du.
```shell
git push origin 
```
Adar baten aldaketak *commit*atzen ditu.
```shell
git remote prune origin
```
Urruneko errepositorioa eguneratzen du.
```shell
git reset --hard HEAD
```
Egindako aldaketak *commit*atu ez badira, desegin egiten ditu.
```shell
git revert 
```
Egindako *commit* baten aldaketak desegiten ditu, *commit*a egin ez balitz bezela.

## Erabilera egokiak 
alt=Master, development eta features adarren erabilera|thumb|445x445px|Adarren erabilera egokia
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, *master*retik 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