---
title: 01. Sistemes de controls de versions [GIT]
tags: daw, GIT, Control Versions, M8, SOC
---
<div style="width: 30%; margin-left: auto;">


</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]

## 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.

## 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__.

## 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]
```

### 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.

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)

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.

[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)