<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Tutorial Git
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Objectius
L'objectiu d'aquest exercici és entendre els conceptes bàsics per treballar en
Git, així com crear el nostre primer repositori i configurar l'accés i autentificació.
## Instal·lació de Git
Per poder utilitzar Git, primer, cal instal·larlo.
### Windows
El podeu descarregar de la pàgina oficial: https://git-scm.com/
Una vegada instal·lat, podeu utilitzar l'eina __Git Bash__ per realitzar el tutorial (funciona igual que una terminal Linux).
### Ubuntu (Debian)
El podeu descarregar i instal·lar mitjançant `apt`.
```bash
sudo apt update
sudo apt install git
```
Una vegada instal·lat, l'ordre `git` hauria d'estar disponible.
## GitHub
[GitHub](https://github.com/) és un servei de hosting de repositoris Git, el qual ofereix tota la funcionalitat de Git
de control de revisió distribuït i administració de codi de la font (SCM) així com afegint les seves característiques pròpies.
A diferència de Git, el qual és estrictament una eina de línia d'ordres, GitHub proporciona una interfície gràfica basada en web i
escriptori així com integració del mòbil.
### Usuari
Abans que res, cal crear (si no en teniu ja) un usuari a la plataforma GitHub.
- Realitza la tasca __Usuari de GitHub__ i indica el teu usuari.
### Tutorial GitHub
Aquest exercici consiteix en relitzar el tutorial de GitHub, que podeu trobar:
- __Versió original (en anglés):__ https://github.com/joapuiib/git_training
- __Versió traduïda (en valencià):__ https://github.com/joapuiib/git_training/tree/master/translations/ca
Vos recomane que treballeu amb la versió en anglés.
Per poder treballar des del vostre usuari, cal que realitzeu un __fork__ en el vostre compte.
- [Com fer un fork a GitHub](https://docs.github.com/es/get-started/quickstart/fork-a-repo)

```warning
En la captura s'utilitza l'organització <strong>fpmislata-dam1s-ed</strong> com a propietari per fer l'exemple.
En el vostre cas, cal que seleccioneu el voster usuari.
```
Abans de fer el tutorial, cal configurar l'autentificació d'alguna de les maneres que s'exposen a continuació.
Vos recomane utilitzar el mètode SSH, que és més díficil de configurar, però més segur i funciona perfectament en el centre.
### Autentificació GitHub
Per poder _clonar_ repositoris privats o per poder realitzar canvis (_push_) en qualsevol repositori,
heu de autentificar-vos.
Des del 13 d'Agost de 2021, GitHub ha eliminat la possiblitat de identificar-se mitjançant usuari i contrasenya.
Vegeu [Support for password authentication was removed. Please use a personal access token instead.](https://stackoverflow.com/questions/68775869/message-support-for-password-authentication-was-removed-please-use-a-personal)
Per tant, podem utilitzar dos mecanismes per identificar-nos.
#### SSH
__Documentació oficial__: [Conectar a GitHub con SSH](https://docs.github.com/es/authentication/connecting-to-github-with-ssh)
##### Generar claus SSH
En __Linux__ o __Mac OS__, hem d'utilitzar l'eina `ssh-keygen` que podeu executar en la línia de comandes del sistema.
```bash
$ ssh-keygen -t rsa -b 4096
```
Vos demanarà introduir un nom personalitzat o utilitzar una contrasenya per desbloquejar aquesta clau. Totes aquestes opcions són configurables
i no són obligatories.
En l'example, crearem una clau anomenada __ssh_ed__, sense contrasenya.

Les claus per defecte es generen en el directori __.ssh__. En el cas que es vuiga personalitzar el nom de la clau,
cal introduir la ruta on es vol guardar. En l'exemple, s'han creat des de dins del directori __.ssh__ perquè
es generen dins d'aquest.
Veureu que s'han generat dos fitxers:
- __dam1s_ed__: Clau privada, aquest fitxer no s'ha de compartir amb ningú ja que és el que s'utilitza per identificar-se.
- __dam1s_ed.pub__: Clau pública, que s'utilitza amb la clau privada per realitzar la autenticació. Aquesta clau s'ha de
proporcionar als equips/serveis on et vols autenticar (en aquest cas a GitHub).
En canvi a __Windows__, podeu generar la clau mitjançant __Git GUI__. Cal accedir a __Help > Show SSH Key__, que ens
obrirà una finestra on podem generar una clau. Una vegada generada la clau, ens mostrarà el contingut
de la __clau pública__ que s'utilitzarà en el següent apartat.

##### Introduir clau SSH a GitHub
Per configutar una clau SSH a Github cal anar a __Settings => SSH and GPG keys => New SSH key__.
En aquesta pàgina, cal indicar un nom, el tipus (Authentication Key) i introduir el contingut de la __clau pública generada__.

Una vegada configurada la clau, podem clonar repositoris mitjançant SSH. Fixeu-vos amb que la URL no segueix el mateix format
que amb el protocol HTTPS.

#### Personal Acces Token (PAT)
La primera resposta de [Support for password authentication was removed. Please use a personal access token instead.](https://stackoverflow.com/questions/68775869/message-support-for-password-authentication-was-removed-please-use-a-personal)
explica molt bé com podeu crear un PAT i com configurar-lo en el vostre sistema.
Per crear un PAT heu d'anar a __Settings => Developer Settings => Personal Access Token => Generate New Token (Give your password)__.
En aquesta pàgina, plenar el formulari (cal seleccionar les opcions _repo_) i donar-li a __Generar token__.
> IMPORTANT! Cal copiar-se aquest token, ja que si tanqueu la pàgina no el podreu tornar a veure.
Per clonar repositoris privats o fer canvis en el repositori remot (_push_), podeu identificar-se de dues maneres:
##### Token a la URL
Si cloneu el repositori utilitzant el token, no us demanarà identificar-vos en cap moment.
Aquest mètode és el més còmode, però no és segur, ja que la PTA es queda guardada en el fitxer `.git/config` i en la història de
la shell.
La sintaxi de l'ordre és
```bash
$ git clone https://<token>@github.com/<user>/<repo>.git
# Exemple
$ git clone https://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@github.com/fpmislata-dam1s-ed/git_traning.git
```
> En l'exemple utilitze l'organització fpmislata-dam1s-ed com a propietari per fer l'exemple. En el vostre cas, cal que introduiu el voster usuari.

##### Token com a contrasenya
L'altra opció és utiitzar el PAT com si fora la contrasenya.
```bash
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
> Cloning into `YOUR-REPOSITORY`...
Username: <type your username>
Password: <type your password or personal access token (GitHub)
```