Alohomora! Accio! edo Commit, Push?

Aurreneko ezarpenak

Zortea dute Raspbian erabiltzaileek, Git lehentasunez baitute instalatuta. Bestela, erraza da Mac OS, Windows eta Linux banaketetan instalatzea ere. Giten webgune honetan daude eskuragai jarraibideak: https://git-scm.com/.

Git terminaletik gobernatzen da; aplikazio xumea da, ez edukitzeagatik ez baitu ezta interfaze grafikorik edo erabiltzaile-leihorik ere. Beraz, hasi aurretiko doikuntzak ere agindu-lerroan bertan egiten dira: ireki terminal bat Raspbianen menuan bilatuta edo teklatuan CTRL + ALT + T sakatuta.

Hasteko eta behin, Gitek erabiltzailea nor den jakin nahi izaten du. Ez da harritzekoa, elkarlanean lan egiteko funtsezkoa baita jakitea fitxategiaren aldaketa bakoitza nori dagokion. Izena emateko, erabiltzaile-izena eta helbide elektronikoa besterik ez dira behar. Norberarenak erabili daitezke lasai asko, ez baldin bazara “Bizirik geratutako mutikoa”, behinik behin.

git config --global user.name "HarryPotter"
git config --global user.email "h.potter@hogwarts.eus"

Ondoren, Giti adierazi behar zaio zein testu-editore erabiliko den. Aukera asko daude terminalean fitxategiak editatzeko; lehentasunik ezean, idatzi honako hau:

git config --global core.editor nano

Nahikoa da ezarpen horiek behin bakarrik zehaztea. Izan ere, biltegi gehiago sortu daitezkeen arren, ez dago etengabe konfiguratu beharrik.

Aurreneko zorro magikoa

Proiektu berri bat sortzeko amorratzen al zaude?

Lehendabiziko aldian, Git arduratuko den lan edo fitxategi guztiak gordetzeko karpeta zein den adierazi behar zaio bertsio-kudeatzaileari. mkdir (make directory) izena du terminaletik zuzenean karpeta sortzeko aginduak. Hortaz, sortu mahaigainean karpeta berria:

mkdir /home/pi/Desktop/minecraft-python

Agindu-lerroko aginduak, kontrakorik adierazten ez bazaie, behintzat, lehentasunez aplikatzen dira erroko direktorioan. Beraz, sortu berri den karpetara joan behar da. Hori egiten du, hain zuzen ere, cd (change directory) aginduak. Hona hemen agindua prest:

cd /home/pi/Desktop/minecraft-python

Giten ohitura da proiektuaren xehetasunak biltzen dituen fitxategi bat sortzea. Modu horretan, kuxkuxeroek jakin ditzakete proiektuaren nondik norakoak edukiak saretik eskuratu orduko. Edozein testu-editore erabili daiteke fitxategi hori sortzeko; hemen nano erabili da README.md sortzeko. Aintzat hartu .md luzapenak Markdown formatua adierazten duela, etiketa-lengoaia bat, hain zuzen ere. Xehetasun gehiagorako, sakatu hemen.

nano README.md

Horrela, aurretik izen berekorik ez baldin badago, fitxategi berria irekitzen da terminalean, hutsik. Bestela, dagoena irekitzen da editatzeko. Txantiloi zehatzik ez baldin badago ere, komeni da izenburua eta azalpen txiki bat ematea programatzeko egitasmoari buruz. Adibidez:

# Blokez bloke, zatoz programatzera! Minecraft hackeatu eta berrasmatu
Ikastaro-hasieran aztertutako adibideen nire biltegi pertsonala da honako hau. Aurrerago proposatutako ereduen kopiak eta erronkak biltegi honetan gorde ditzaket. Hemen ikasiko dut nola: Giten funtzionamendua probatuz! 

Bestalde, CTRL + X sakatzen bada, mezu bat agertzen da nola gorde nahi den galdezka. Erantzuteko, idatzi b eta sakatu ENTER (sistema euskaraz ezarri bada; bestela, idatzi y). Fitxategia uneko karpetan sortu dela egiaztatzeko, berriz, terminala dagoen lekuaren inbentarioa egiten duen agindua erabili daiteke: ls.

Orain arte egindakoak ez du karpeta magiko bihurtzen. Beraz, zorroa sorgintzeko doikuntzak egiteko unea da: ezkutuko karpeta bat sortu behar da, Git repository izenekoa, eta bertan jasotzen dira dira fitxategi guztietan egiten diren aldaketak. Terminala uneko karpetan delarik, Giti agindu behar zaio biltegi hori (repo deitzen zaio laburbildurik) bertan sortzeko:

git init

ls agindua erabili arren, ez da ezer berririk nabaritzen, ezkutuan baitago. Alabaina, ls -a idazten bada, fitxategi eta azpikarpeta ezkutuak ere agerian geratzen dira:

ls -a

Honelako zerbait ikusten da terminalean:

.  ..  .git  README.md

.git hori da repo skeleton biltegi sekretua. Barrukoa beste era honetara ikusi daiteke:

ls -a .git

Hori idaztean, honako hau ikusten da:

branches  config  description  HEAD  hooks  info  objects  refs

Oraingoz, ez dago gehiago jakin beharrik, soilik azpiatal horietan biltegiratzen dela aldaketen informazio guztia; minecraft-python karpetaren barruan jasota dagoenarena, alegia.

Liburuak zorrora

Motxila sorginduta dago honezkero, baina oraindik ez zaio adierazi liburuak barruan sartzeko prest dagoenik. README.md biltegian edo repoan sartzeko, idatzi honako hau agindu-lerroan:

git add README.md

Aurrerantzean Git adi egongo da fitxategi horretako aldaketei. Nahi denean jakin daiteke zein den repoan jasotakoaren egoera edo egunerokoa, honako hau idatzita:

git status

Horrek honelako zerbait itzuli behar luke:

On branch master

Initial commit
Changes to be committed:
    (use "git rm --cached <file>..." to unstage)

     new file:   README.md

Hala, informazio horrek adierazten du README.md fitxategia oraindik ez dagoela erregistratuta, haren berri bazuen arren; hots, oraindik ez duela fitxategian gertatukoen mugarririk ezarri. Izan ere, zer dakien esateko baino ez du abisatzen, kontuan izan gabe uneko egoera erregistratu den edo ez. Abisuaren berri izandakoan, agindu hau idatzi behar da, itzulera puntua gorde nahi izanez gero:

git commit -am 'README.md gehituta'

Horrekin lortzen da Giten repo lokalean jasotzea karpetan egindako aldaketa zein eguneraketa guztiak, eta hurrengorako mezu bat eransten zaio egindakoa deskribatuz. Edozer idatzi daiteke, baina komeni da aurreko gordetze-puntuaz geroztik egindakoa motz eta zuzen adieraztea.

Bertsioak berrezartzea

Dagoeneko antolatu dira sareko eta ordenagailuko karpeten egiturak eguneraketen berri zuzenean emateko. Xedea ez dira prestakuntzak, ordea, proiektuko fitxategien kontrola baizik. Sortu karpetan teleportatu.py eta zein-bloke-inguruan.py fitxategiak. Gero, egiaztatu ls aginduarekin badirela:

README.md teleportatu.py zein-bloke-inguruan.py

Zorroan sartu behar dira bi fitxategiak, eta jarraian, repoari berri hau eman:

git add --all
git commit -am 'teleportatu (apparate aztikeria) eta inguruko blokeak sartuta’

Hurrengo pausoa da bateko zein besteko kodeak idazten hastea. Aldaketa esanguratsu bat egiten den aldiro erregistratzea da jarraibide zuzenena. Adibidez, editatu zein-bloke-inguruan.py fitxategia eta idatzi honako kode hau Alex zapaltzen ari den beheko blokea zein den asmatzeko:

from mcpi.minecraft import Minecraft
from time import sleep
mc = Minecraft.create()

while True:
       x,y,z = mc.player.getPos()
       behe = mc.getBlock(x,y-1,z)
       goi = mc.getBlock(x,y+2,z) # Alexek bi bloke luzeko altuera du 
       print("goi " + str(goi))
       print("behe " + str(behe))
       print("-------------")
       sleep(2)

Git oharkabean harrapatzerik ez dago, eta eguneraketa hori ez da salbuespena: badaki egin dela. Hala ere, erabiltzaileak berak agindu behar dio kudeatzaileari erregistratzeko eta mugarri berria ezartzeko. Honela:

git add zein-bloke-inguruan.py
git commit -am 'Alexek behean eta goian dituen blokeak adierazita’

Baina, bat-batean, ezustean ezabatu egin da behe aldagaiaren kalkulua. Hori gutxi ez, eta eguneraketa repoan ere gorde ere da!

git add zein-bloke-inguruan.py
git commit -am ‘beheko blokearen aldagaia ezabatuta EZUSTEAN’

Gitentzako hori ez da oztopo: denboran atzera egin daiteke eta fitxategiko bidalketa guztiak berrezarri.

git log zein-bloke-inguruan.py

Eskaera horrek fitxategiaren egunerokoa itzultzen du; honelako zerbait, gutxi gorabehera:

commit b8e3cbe7e7dd4edb753859a271c5329fe30ab25a
Author: HarryPotter <h.potter@hogwarts.eus>
Date:   Tue Nov 21 12:41:54 2017 +0100

   beheko blokearen aldagaia ezabatuta EZUSTEAN

commit 460758fef4d5aa7a196134f2aff53102f5b49494
Author: HarryPotter <h.potter@hogwarts.eus>
Date:   Tue Nov 21 12:26:51 2017 +0100

   Alexek behean eta goian dituen blokeak adierazita

commit 096f4599b072c14563d3207b1db68a62bba90b39
Author: HarryPotter <h.potter@hogwarts.eus>
Date:   Tue Nov 21 12:23:05 2017 +0100

   teleportatu eta inguruko blokeak sartuta

Goi-goian dago azkeneko mugarrian sortutako oharra. Zorionez, sinkronizatzean idatzitako mezuak bilaketan laguntzen du eta komeni da gogoan izatea hurrengoan ere zuzen idazteko. Hala ere, git log -p zein-bloke-inguruan.py idatzi daiteke mezuak argibide gutxi ematen badu; nahiz eta horrek bilaketa moteltzen duen, eguneratzeak xehe-xehe ikusten dira.

Horrez gain, aurretik erregistratutako edozein egoeratan berrezarri daitezke karpetako fitxategiak. commit hitzaren ondoko hizki-segidari hash deitzen zaio, eta hori da datu-baseetan bilaketak egiteko erabiltzen den identifikazio bakarra. Dagokiona kopiatuz eta dei eginez nahi den egoerara itzultzen da:

git checkout 460758fef4d5aa7a196134f2aff53102f5b49494 zein-bloke-inguruan.py

Mugarri berria ezar daiteke ondoren, etorkizunerako itzulera-puntu gisa:

git commit -am 'beheko aldagaia berreskuratuta'

Era honetara, egindakoaren aztarna luzea uzten da gordeta, nahi duenarentzat eskuragarri. Baina batzuetan, ez da nahi izaten dena bistaratu, eta mugarri hauek ere ezaba daitezke behin-betiko. Kontu handiz egitekoa da honako hau ere, adierazten zaion mugarritik beranduagoko guztia desagerrarazten baitu. Egin proba honela:

git reset --hard itzultzeko_mugarriaren_hash

Aldaketa-erauntsia

Proiekturik gogokoena hobetzeko proposamena jaso duzu. Baina ideia berri horrek aldaketa ugari eta sakonak egitea dakarrenez, beldur zara egindakoa nahastu eta aurrekoa galtzeko. Karpetaren kopia bat egin daiteke, baina lan astuna da beste repo paralelo bat sortu eta kudeatzea. Ez larritu, hala ere! Gitek berariazko ezarpen berezi hau du: branches edo adarrak sortzean, repo berdinean kopiak egin eta jatorrizkoa mantentzen du.

Hasteko, repoaren egoerari begiratu behar zaio: orduraino adar bakarra duela adierazten du. Ikusi, bestela, hau sartuta:

git status

Honako honen antzerako zerbait erakusten du:

On branch master

nothing to commit, working directory clean

Mugarik ez dagoenez, sortu beste adar bat honela:

git checkout -b lagunaren-aholkuz-bertsioa

Egoerari berriz begiratzean (git status), aldatu egin dela ikusten da:

On branch lagunaren-aholkuz-bertsioa
nothing to commit, working directory clean

Horrek adierazten du adar berrian zabiltzala lanean. git branch agindua erabiltzen da repoan eskuragarri dauden adar guztien berri izateko. Orain hau adierazten du:

* lagunaren-aholkuz-bertsioa
 master

Aurrerantzean, lagunaren-aholkuz-bertsioa adarrean lan egin ahalko da besteei eragin gabe. Egindako aldaketak ontzat emanez gero, adar hori jatorrizkoari batzen zaio eta, bestela, erabat ezaba daiteke git branch -D lagunaren-aholkuz-bertsioa agindua erabilita. Dena den, adarrak batzeko egiaztatu egin behar da aldaketa guztiak erregistratu direla; horretarako, adarrean commit egin eta esan jatorrizkora itzultzeko:

git add zein-bloke-inguruan.py
git commit -am 'inguruko bloke gehiago asmatzen ditu orain'
git checkout master

Azken agindu horrek adar nagusira ekarri gaitu bueltan, eta adar nagusi horretan bertan eskatu behar zaio nahi den adarrekoarekin zapaltzeko:

git merge lagunaren-aholkuz-bertsioa

Aldaketak egindako fitxategiei bakarrik eragiten die, bietan berdin zegoena mantenduz eta berriak erantsiz (berriak sortu badira).

OHARRA: arazoak sor daitezke bi adarrekin aldi berean lan egitean eta jatorrizkoan batzean, Gitek ez baitu irizpiderik lehentasunak ezartzeko. Horregatik aholkatzen da adarrekin banaka lan egitea.

Hodeiko zorroan elkarlanean

Dagoeneko ezarri dira lokalean lan egiteko Giten erabilerarako oinarriak, eta sasoia da ezaugarri esanguratsuenei ekiteko: lana partekatzea eta lankidetza sustatzea.

Jakina denez, hodeia hainbat zerbitzutako lekuen euskarria da. Hodeian aukera zabala dago testu-dokumentuak gordetzeko eta eguneratzeko, baita norbere Git biltegiak doan eskegitzeko ere. Horien artean daude GitLab eta BitBucket, baina ikastaro honetarako GitHub aukeratu da oparoena delako.

Aurreneko eginbeharra doako kontua sortzea izaten da. Erabiltzailearen izena, helbide elektronikoa eta pasahitza behar dira.

Erabiltzaile-izena, helbide elektronikoa eta pasahitza eskatzen ditu kontua sortzeko, hurrenez-hurren.

Kontua sortu ostean, sakatu repo berria sortzeko New Repository botoia.

Repoaren izena eta deskribapena emateko, berriz, bete dagozkien hutsuneak eta sakatu Create Repository. Ordenagailuko mahaigaineko karpetan egindako ariketak partekatzeko garaia da: sortu izen bereko minecraft-python biltegia hodeian!

Hainbat jarraibide dituen orri bat kargatzen da ondoren. Repo berria hutsetik hasteko aukera dagoen arren, dagoeneko lokalean prest dagoena erabiltzea dagokigu. Beste behin ere, terminalaren bidez lan egiteko ohiturari eutsiko zaio.

Ondoren, egiaztatu sinkronizatu nahi dugun karpetan dagoela terminala, eta, bestela, joan cd eginda. Egokitu kontua (HarryPotter zurearekin ordezkatuta) eta idatzi honako hau hodeian zabalduko den repoa izendatzeko:

git remote add sareko-zorroa https://github.com/HarryPotter/minecraft-python.git

origin da urrutiko repoa izendatzeko lehenetsitako hitza. Izena edozein dela ere, garrantzitsuena da izen hori gogoratzea aurrerantzean eguneraketak kargatzeko. Halaber, repo bakar batek urrutiko erreferentzia edo remote bat baino gehiago izan ditzake. Hori bai, lotzen duten estekaren balioa aldatuko balitz (adibidez, biltegiaren izena eguneratu delako), haiek ere norberak berritu beharko lituzke (git remote set-url origin https://github.com/HarryPotter/biltegi_izen_berria). Bukatzeko, berriz, agindu hau sartu behar da zorro biek bat egin dezaten:

git push -u sareko-zorroa master

Aitzitik, beste era honetara egin behar da origin izena mantendu bada urrutikoarentzat:

git push -u origin master 

Erabiltzaile-izena eta pasahitza terminaletik zuzenean sartzean, konexioa egin eta bi zorroak sinkronizatu egiten dira, lokala eta hodeikoa, alegia. Pauso horiek guztiak egin ostean, ordenagailuko repoaren kopia erakusten du nabigatzailean zabalik dagoen GitHuben leihoak.

Horiek horrela, amaitu dira prestaketak, eta, aurrerantzean, agindu-lerrotik sinkronizatuko da hodeiko informazioa repo lokalarekin. Honela egin behar da lehenetsitako remote izenari eutsi bazaio:

git push origin master

Adar bat eguneratzeko, aldiz, honako hau idatzi behar da:

git push origin adarraren-izena

Elkarlanerako aukerak

Beste plataformekin elkarlanean hasitakoan ateratzen zaio GitHubari zukurik gehien. Proiektuen kopiak egin daitezke, besteenen garapen paraleloak egiteko, batik bat, baina baita norbere lanean probak egiteko ere. Era batera zein bestera, aurrerapenak egin daitezke beste inor eta ezer kaltetzeko beldurrik gabe, eta proiektu interesgarriak GitHubera bidali daitezke partekatzeko. Hartara, erabiltzaileek bi modu hauek dituzte akatsak topatu eta hobekuntzak proposatzeko: issues edo arazoak, eta pull requests edo proposamenak.

Github arazoak

Demagun honako kode-zati hau dagoela biltegi batean:

print('Hello World!)

Begi zorrotza duenak laster igarri dio ez duela funtzionatuko, ez da hala? Ez al zaio ezer falta? Akatsa zuzentzeko, eskaera hau egin behar da: sakatu repoko issues erlaitzari, sortu arazo berria (New Issue) eta deskribatu. Repoaren arduradunek jaso ahala erantzun ditzakete zuzenketa-eskaera horiek, eta funtzionamenduari eragiten dieten akatsak zuzendutakoan, eskaera itxi egiten da.


Github proposamenak

Egiari zor, repoen arduradunek gustura jasotzen dituzte zuzenketa-eskaerak; are gehiago estimatzen dituzte, alabaina, zuzenean eskua hartu eta hobekuntzak eransten dituztenak. Horretarako, dena den, biltegiaren kopia bat egin behar da, bertatik lan egiteko. Fork deitzen zaio prozedura horri, programatzeko erabiltzen den teknikaren omenez. Kopia hori, funtsean, adar bat bezalakoa da, nahiz eta sortzailea ez denak egin eta kudeatu.

Ezer baino lehen, beraz, bilatu Fork erlaitza proiektuaren orri nagusian eta sakatu.

Hori egitean, norbera egiten da kopiaren jabe. Clone or Download botoia agertzen da eta hari sakatzean repo berriaren URI (Uniform Resource Identifier) bilaketa-kodea erakusten du; kode hori arestiko adarretako hash kodearen ordaina da, gutxi gorabehera. Beraz, hurrengo pausoa da terminaletik agintzea (git clone) eta kopia lokalera ekartzea. Adibidez:

git remote add sareko-zorroa https://github.com/bekereke/minecraft-python.git

Handik aldi batera, fitxategi eta azpikarpeta guztien kopiak jasotzen dira ordenagailuan, eta erabiltzailearen esku dago beharrezko aldaketak eta probak egitea. Horrez gain, aukeran dago aldaketa horien berri ematea (commit eginda) eta hodeikoa eguneratzea (push eginda). Kasu horretan, oso garrantzitsua da commit egin dela jakinaraztea, jabeari aldaketen berri emateko.

Azkenik, garatutako proposamena jakinarazten zaio jatorrizkoaren jabeari, hark aintzat hartu dezan. Hori egiteko, GitHubera itzuli behar da eta New Pull Request botoiari sakatu behar zaio. Hari sakatuta, aukera dago berriz ere egindakoaren azalpen xeheagoak emateko, baina ez da ezinbestekoa, commit egitean ere eman baitira.

Beheko Create pull request botoiari emanez bukatzen da prozesua. Bejondeizula! Orain, biltegiaren arduradunek ikus dezakete proposamena eta haiena da erabakia: ekarpena errefusatu edo proiektura batu. Dena den, haiek ere eztabaidatu edo azalpenak eman ditzakete mezuak idazteko gunetik, eta iritziak partekatu ere bai, akordio batera heldu edo adostasuna lortu arte.

Gertu zara dagoeneko Git erabiltzeko. Animatu eta partekatu ikastaroan egiten dituzun fitxategiak: adibideak, ereduak, erronkak, sekuentziak eta kode-borrokak. Parte hartu besteek egindakoetan akatsak zuzenduz eta proposamenak eginez!