---
# System prepended metadata

title: '01. Sistemes de controls de versions [GIT]'
tags: [' SOC', daw, ' M8', ' GIT', ' Control Versions']

---

---
title: 01. Sistemes de controls de versions [GIT]
tags: daw, GIT, Control Versions, M8, SOC
---

<div style="width: 30%; margin-left: auto;">
    
![](https://hackmd.io/_uploads/HJiR4eGJT.png)  
    
![image](https://hackmd.io/_uploads/By3ai4Bolx.png)
    
</div>



<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Llicència de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />Aquesta obra està subjecta a una llicència de <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Reconeixement-CompartirIgual 4.0 Internacional de Creative Commons</a>

# 01. Sistemes de controls de versions [GIT]
![](https://hackmd.io/_uploads/H1_wniXS3.png)

## Què és un sistema de control de versions.
Un sistema de control de versions és un programari o un conjunt de programaris que permenten gestionar l'historial de canvis d'un conjunt de fitxers al llarg del temps.
Entre d'altres funcionalitats, ens permet recuperar estats anteriors d'un conjunt de fitxers o d'un sol fitxer en particular. Una altra funcionalitat força atractiva és que ens permet que diversos dessenvolupadors editin un mateix fitxer localment i es puguin fusionar tots els canvis de manera segura.
Altres funcionalitats:
* Veure tots els canvis realitzats a un projecte, qui els va fer i quan.
* Afegir un missatge a cada conjunt de canvis realitzat.
* Crear branques d'un projecte, cadascuna amb els seus conjunts de canvis de forma que no interfereixin les modificacions fetes a una branca a les altres branques i si s'escau fusionar-les novament.
* Etiquetar estats temporals dels projectes. Per exemple, releases.

![Imatge de control de versions](https://hackmd.io/_uploads/SJYrGCqsgg.jpg)


## Què és GIT?
GIT és el sistema de control de versions hegemònic actualment. És un control de versions distribuit de programari lliure.
GIT administra la història del nostre projecte a un fitxer ocult anomenat .git que es situa al nivell superior de l'estructura de directoris que volem gestionar. A aquest directori que conté tota l'història de canvis del nostre projecte li diem __repositori__.
![Sense títol](https://hackmd.io/_uploads/H1jTGAcjee.jpg)


## Per què GIT?
Com hem comentat al paràgref anterior, GIT eś el sistema de control de versions **hegemònic** avui i desde ja fa força anys, el seu percentatge d'ús és abrumador.

## Nomenclatura utilitzada a GIT.
* Arbre de treball: Conjunt de directoris i fitxers que conté el nostre projecte. La nostra àrea de treball en l'estat actual.
* Repositori: Arxiu ocult gestionat per GIT que conté tota la història de canvis del nostre projecte. Conté tota la informació històrica del nostre projecte.
* Hash: És un nombre que identifica qualsevol tipus d'objecte dins de GIT de manera unívoca. Els objectes de GIT inclouen moltes coses, entre elles els commits.
* Commit: Conjunt de canvis que es desen a l'historial de GIT. Tenen associats un comentari i un Hash.
* Branca: Línia independent de commits vinculats, permeten als desenvolupadors treballar de forma paralel·la i eventualment fusionar els canvis en una branca comuna.
* Remot: No és més que una referència a un altre repositori git amb un nom associat. **Important**: El remot pot ser un repositori al núvol, GitHub, GitLab o equivalents, però també pot ser un repositori a un servidor local o inclús un repositori a una altra carpeta del nostre propi sistema de fitxers local.

## Instal·lació i configuració inicial.
A Ubuntu-Linux, podem instal·lar GIT amb la comanda:
> $ sudo apt install git

Verificarem la correcta instal·lació demanant-li la versió:
> $ git --version

Configuració mínima inicial:
```bash=
$ git config --global user.name «my_name»
$ git config --global user.email «my_email»
$ git config --global core.editor [vim|nano|gedit|others]
```

![Sense títol](https://hackmd.io/_uploads/rJblQC9jgl.png)

### Fitxers de configuració:
GIT utilitza un sistema de configuració en _cascada_. Hi ha tres nivells diferents de configuració, cadascú en un fitxer diferent que s'apliquen de forma ordenada i els nivells més concrets sobrescriuen les configuracions del nivell superior.
* Nivell superior: aplica a tots els usuaris del sistema.
    Es configura al fitxer: /etc/gitconfig
* Nivell d'usuari: Sobrescriu les configuracions aplicades al nivell superior, aplica a tots els repositoris del mateix usuari.
    Es configura al fitxer: ~/.gitconfig o ~/.config/git/config depenent de la distro de Linux utilitzada.
* Nivell inferior: Sobrescriu les configuracions aplicades al nivell d'usuari, aplica només a un projecte.
    Es configura dins del mateix projecte al fitxer: .git/config
    
### Creació d'un nou repositori.
![Sense títol](https://hackmd.io/_uploads/H1g4QC5seg.jpg)

Per a convertir qualsevol directori del nostre sistema de fitxers en un arbre de treball de GIT només hem d'executar la comanda 
> $ git init

i es generarà el directori ocult .git que conforma el nou repositori.

També podem importar un repositori preexistent amb la comanda:
> git clone <ruta_repositori_existent>

### Generant commits (còpia de seguretat de l'estat actual)
![Sense títol](https://hackmd.io/_uploads/ByBb5A9sex.jpg)

Un cop que tenim el nostre repositori generat (amb la comanda __git init__ explicada abans), i hem començat a treballar, podem realitzar una _'còpia de seguretat'_ en qualsevol moment.
Amb GIT no fem una còpia de tot l'arbre de treball de manera indiscriminada, només d'aquells fitxers i/o directoris que considerem adients. Per a indicar de quins fitxers hem de realitzar la còpia de seguretat els hem d'afegir a un àrea especial anomedada '_staging area_' o _'index'_. Per afegir fitxers a l'staging area utilitzem la comanda `git add <nom_fitxer>`.
Si volem consultar quins fitxers tenim en estat '_staged_' podem utilitzar la comanda: `git status`.
Per treure un fitxer de l'staging area i que no formi part del proper commit, utilitzem la comanda: `git restore --staged <ruta_fitxer>`

### Practiquem una mica.
![images](https://hackmd.io/_uploads/Hy88qR9iex.jpg)

[Pràctica 01 -GIT-. Inicialització d'un repositori GIT](/G0bN4IXwQtOYiFTnocgtIw)

### Més informació.
[02. Git com a llista de commits ordenats en el temps.](/aLlqarGrSDeBWPrkliswgw)

