summaryrefslogtreecommitdiff
path: root/2.md
diff options
context:
space:
mode:
Diffstat (limited to '2.md')
-rw-r--r--2.md213
1 files changed, 213 insertions, 0 deletions
diff --git a/2.md b/2.md
new file mode 100644
index 0000000..dc8ad0f
--- /dev/null
+++ b/2.md
@@ -0,0 +1,213 @@
+---
+title: GIT — EITB 2022
+subtitle: Erabilera aurreratua
+license: CC-BY-SA 4.0
+author: Ekaitz Zarraga - ElenQ Technology
+links-as-notes: true
+lang: basque
+polyglossia-lang:
+ name: basque
+how-to: pandoc -f markdown+smart -t beamer % -o pdf/2.pdf --pdf-engine=xelatex --template=./template.tex
+...
+
+## Lizentzia
+
+- CC-BY-SA 4.0
+- Dokumentu honen edukiak eta irudiak [**Pro Git (Scott Chacon, Ben
+ Straub)**](https://git-scm.com/book/en/v2) liburutik atera dira.
+
+# Git zerbitzarian
+
+## Git zerbitzarian: sarrera
+
+Lankideen artean kodea partekatzeko zerbitzari bat izatea ideia ona da: beti
+dago eskuragarri, kudeaketa sinplifikatzen du, etab.
+
+Zerbitzarietan *bare repository*-ak erabiltzen dira. Hauek ez dute *working
+directory*-rik. `.git` direktorioan dagoena bakarrik dute.
+
+- `git init --bare` *bare repository* bat eratzeko.
+
+## Protokoloak
+
+Protokolo ezberdinak erabili daitezke repositorioen arteko komunikazioa
+egiteko:
+
+- **Local**: beste fitxategi batean dagoen repositorioa. `git clone
+ /path/to/file`-en bitartez klonatu daiteke.
+- **HTTP**: *smart* edo *dumb* moduak ditu. *Smart*-ek baimenak kudeatu ditzake.
+ *Dumb*-ek fitxategiak eman baino ez du egiten.
+- **SSH**: Askotan erabiltzen da. Erabiltzaile bat behar du.
+ `git clone ssh://[<user>@]<host>/<project>.git` erabiliz. SCP-ren modu
+ laburra erabili daiteke: `[<user>@]<host>:<project>.git`.
+- **Git**: SSH-ren antzekoa da baina autentikazio barik.
+
+## Protokoloak — Adibide bat
+
+Nire [zerbitzaria](https://git.elenq.tech/):
+
+- Web bitartez proiektuak aztertu daitezke. `cgit` erabiltzen du. Beste aukera
+ batzuk daude: `gitweb` adibidez, Git-ekin datorrena.
+- Proiektu publikoak Git-en bitartez zerbitzatzen dira edonork kopiatu ahal
+ izateko.
+- Idazteko baimena SSH-ren bitartez zerbitzatzen da, baimena kontrolatu ahal
+ izateko.
+
+*Liburuan azaltzen da gauza hauek nola muntatu.*
+
+
+# Git workflowak
+
+## Workflow zentralizatua
+
+Git-en izaera banatuak *workflow* ezberdin asko ahalbidetzen ditu baina gaur
+egun *workflow zentralizatua* erabiltzen da gehien, Web zerbitzu integratuen
+arrakastagatik (Github, Gitlab, Gitea...) non tiketak eta kodea kudeatzeko
+aukera dagoen.
+
+![Bezero guztiak zerbitzariarekin sinkronizatzen dira](img/centralized_workflow.png){ height=140px }
+
+## Email-en bitartez
+
+Software libre proiektu asko oraindik emailean oinarritzen dira aldaketak
+proposatzeko.
+
+- `git format-patch <commit-selektorea>` aukeratutako commitak patch
+ fitxategietan idazteko
+- `git send-email <patch-fitxategiak>` patch-ak emailez bidaltzeko
+ (konfigurazioa behar du)
+- `git am <patch-fitxategiak>` jasotako patch-ak proiektuan commiteatzeko
+- `git apply <patch-fitxategiak>` jasotako patch-ak aldaketa moduan aplikatzeko
+
+
+# Git tresna aurreratuak
+
+## Commit selektoreak
+
+Giten komando askok commit askotan aplikatu daitezke. Gitek commit selektore
+ezberdinak aplikatzea ahalbidetzen du commitak aukeratzeko.
+
+- `git show <commit-selektorea>` aukeratutako objektuak erakusteko
+
+
+## Commit selektoreak — I
+
+- **SHA-1 hasha**: commit identifikadorea bera erabili daiteke selektore moduan.
+ Oso luzeak direnez, hasierako karaktereak bakarrik erabili daitezke anbiguoak
+ ez badira. `git log --abbrev-commit` commit id-aren laburpena egiten du.
+
+- **Adarren burua**: adarraren izena erabiltzean, adarraren buruaren commita
+ aukeratzen da: `git show <adarra>`. Adarraren buruaren commit id-a
+ ateratzeko: `git rev-parse <adarra>`.
+
+- **Reflog-a**: Reflog-a repositorioaren egoera gordetzen du historiko baten
+ modura. Reflog-aren sarreren izenak erabili daitezke commit selektore moduan.
+ Gainera denbora erabili daiteke: `HEAD@{yesterday}`.
+
+ - `git reflog` reflog-aren sarrerak erakusteko
+
+## Commit selektoreak — II
+
+- **Gurasoak**: aukeratutako commiten gurasoak eta aitzindariak lortu daitezke:
+
+ - Txapela (`^`) erabiliz aukeratutako commitaren gurasoak lortu daitezke.
+ Adibidez: `git show HEAD^`. Merge commitetan (guraso asko dituztenak)
+ gurasoen artean aukeratzeko `^` eta gero gurasoaren zenbakia jarri
+ daiteke guraso konkretua lortzeko.
+ - Tildea (`~`) erabiliz aitzindariak lortu daitezke. Zenbaki bat gehituta
+ aurreko aitzindaria lortu daiteke. Adibidez `git show HEAD~2`: aurreko
+ commitaren aurrekoa lortu.
+
+## Commit selektoreak — III
+
+- **Commit tartea**: bi commiten arteko tartea lortzeko: `..`
+ Adarrekin ere egin daiteke, adar batetik besteraren burura ailegatzeko behar
+ diren commitak lortzeko:
+ ![](img/double-dot.png){width=350px}
+ - `git log master..experiment` => D C
+ - `git log experiment..master` => F E
+
+## Commit selektoreak — IV
+
+- **Puntu tripleak**: bi adarretatik ailegatu ahal diren commitak, baina
+ amankomunean ez daudenak:
+ ![](img/double-dot.png){width=350px}
+ - `git log master...experiment` => F E D C
+ - Zein adarretik datozen ikusteko `--left-right`:
+ ```
+ git log master...experiment --left-right
+ < F
+ < E
+ > D
+ > C
+ ```
+
+## Commit selektoreak — V
+
+- **Puntu multipleak**: eskaera konplexuagoak egiteko `^` (aurretik) edo
+ `--not` erabili daiteke, adar horren commitak baztertzeko:
+ - Hurrengo komandoak baliokideak dira:
+ ```
+ git log refA..refB
+ git log ^refA refB
+ git log refB --not refA
+ ```
+ - Hurrengo komandoek `refA`tik eta `refB`tik lortu daitezkeen commitak
+ hartzen dituzte, `refC`tik lortu daitezkeenak baztertuz:
+ ```
+ git log refA refB ^refC
+ git log refA refB --not refC
+ ```
+
+## Staging interaktiboa
+
+- `git add --interactive | -i` stage-a modu interaktiboan kudeatzeko
+- `git add --patch | -p` gehituko diren aldaketak modu interaktiboan
+ aukeratzeko. Blokez bloke
+
+*Komando askotan erabili daitezken aukerak dira hauek.
+Oso erabilgarriak dira.*
+
+## Stash-a
+
+Aldaketak gordetzeko zaku bat da *stash*a. Trakeatu gabeko aldaketak bertan
+sartu daitezke repositoria aldatu/berriztu/mergeatu eta gero aldaketak berriro
+adar berdinean edo beste batean ateratzeko.
+
+- `git stash [push]` direktorioa garbitu eta aldaketak *stash*era sartzeko
+- `git stash list` *stash*aren sarrerak ikusteko
+- `git stash apply [<stash-sarrera>]` aukeratutako *stash* sarrera (defektuz
+ azkena) aplikatzen dio *working directory*ari.
+- `git stash drop [<stash-sarrera>]` aukeratutako *stash* sarrera ezabatzeko
+- `git stash pop` = `git stash apply` + `git stash drop`
+
+*Push* eta *pop* izenak erabiltzen dira *stash*a LIFO ilara edo stack baten
+moduan kudeatzen delako. *Gainetik gehitu eta gainetik atera*
+
+## Stash-a — Aukera interesgarriak
+
+- `git stash apply --index` egitean *staging area*ra bidaltzen dira *stash*ean
+ *staging area*an zeuden fitxategiak. Defektuz ez dira *stage*era bidaltzen.
+- `git stash --keep-index` indexatutako (*stage*a) fitxategiak ez dira
+ *stash*era gehitzen, eta *stage*ean mantentzen dira.
+- `git stash --include-untracked|-u` trackeatuta ez dauden fitxategiak ere
+ *stash*eatzeratzeko.
+- `git stash --all|-a` baztertutako fitxategiak (`.gitignore`) ere *stash*era
+ gehitzeko
+- `git stash --patch|-p` *stash*eratzeratzeko aldaketak modu interaktiboan
+ aukeratzeko
+- `git stash branch <adar-izena>` aldaketak *stash*era bidali, adar berri bat
+ sortu eta bertan *stash*a aplikatu. Dena ondo badoa *stash*a garbitzen du
+ bukatzerakoan.
+
+## Direktorioa garbitzeko
+
+- `git stash --all` egitea direktorio osoa garbitzen du, hau da, trackeatuta ez
+ dauden fitxategiak eta aldaketak *stash*earatzen ditu.
+- `git clean` egiten antzeko efektu bat lortu daiteke *stash*a erabili gabe,
+ zuzenean aldaketak eta fitxategiak ezabatuz.
+ - `-f` (*force*) beharrezkoa da (defektuz, aukera bat dago desaktibatzeko)
+ nahi gabe ez egiteko
+
+> KONTUZ: `git clean --dry-run|-n` erabili badaezpada, zer egingo duen ikusteko
+> benetan exekutatu baino lehen.