Gitlab - Repositori

Introducció

Git és un sistema de control de versions descentralitzat.

De totes maneres, és habitual allotjar el codi en un repositori per compartir codi amb altres, encara que només sigui amb tu mateix i els teus diferents equips i entorns d’execució.

A GitLab un repositori forma part d’un projecte i no pot existir sense un projecte GitLab.

A través del projecte configura les opcions del teu repositori.

Usuari

Si mai t’has registrat a Gitlab, el primer que has de fer és anar a aquest enllaç: Users - Sign In

I a continuació registrar-te:

Al final tindras un usuari amb la teva identitat:

Projecte

Crea un nou projecte:

Escull Create blank project:

Omple les dades que et demanen.

L’slug del projecte forma part de l’URL del projecte.

Ja pots crear el projecte!

Com que ha deixat l’opció per defecte d’inicialitzar el repositori amb un fitxer README, aquest s’ha creat amb un commit inicial.

SSH

Per defecte, quan crees un repositori aquest és privat.

Per accedir a un repositori remot privat, o modificar el contingut de qualsevol repositori (sigui públic o privat) necessites un sistema d’autenticació.

Un clau “ssh” et permet identificar-te amb un servidor remot.

Genera un parell de claus SSH tal com s’explica a: SSH

Terminal window
ssh-keygen
Note

Prem els cops que faci falta.

Fes clic a la teva icona d’usuari i selecciona Edit Profile

A continuació selecciona SSH Keys.

Mira quina és la clau pública que has generat (ajuda’t amb la tecla )

gc .ss i .

Terminal window
gc .\.ssh\id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFJgYeQKuRlSp6BOSaVriPqJ5IKakDpHLfP4csIN8Ft/ david@elite

Afegeix la teva clau pública a GitLab:

Verifica que et pots autenticar amb els servidors de Gitlab:

Terminal window
ssh -T git@gitlab.com
Welcome to GitLab, @ddemingo!

Local

Ves al projecte que has creat abans:

Copia l’URL del projecte per clonar amb SSH:

Obre una sessió de terminal amb Powershell.

Clona el repositori en la màquina local amb la teva clau SSH:

Terminal window
git clone git@gitlab.com:ddemingo/poesia.git
Cloning into 'poesia'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.

Ja pots escriure la primera estrofa de la teva primera poesia:

Terminal window
cd poesia
notepad ara-mateix.txt

Fes el commit corresponent:

Terminal window
git add .\ara-mateix.txt
git commit -a -m "Afegit primera estrofa del poema 'Ara mateix' de Miquel Martí i Pol"
Terminal window
[main ade00cb] Afegit primera estrofa del poema 'Ara mateix' de Miquel Martí i Pol
1 file changed, 5 insertions(+)
create mode 100644 ara-mateix.txt

El repositori local està configurat amb el repositori remot de Gitlab:

Terminal window
git remote -v
Terminal window
origin git@gitlab.com:ddemingo/poesia.git (fetch)
origin git@gitlab.com:ddemingo/poesia.git (push)

A continuació actualitza els teus commits al repositori remot de Gitlab:

Terminal window
git push
Terminal window
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 24 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 472 bytes | 472.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To gitlab.com:ddemingo/poesia.git
f7180ad..ade00cb main -> main

En qualsevol moment pots enviar tots els canvis que has fet al repositori remot.

Distributed

A continuació treballarem amb el mateix projecte en dues màquines distintes.

WSL

Entorn de treball

Crea una màquina amb Windows Subsystem for Linux (WSL) o Isard.

Crea una clau ssh a la màquina nova.

Afegeix la clau pública a Gitlab.

Clone el projecte:

Afegir una estrofa

Afegeix una nova estrofa al poema ara-mateix.txt:

Fes un commit del canvi i un push al repositori remot:

Afegir un poema

Crea el poema la-vaca-cega.txt amb la primera estrofa:

Afegeix el poema a git i fes només un commit:

Si fas un git status pots veure que la branca main està un commit per davant de origin/main:

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)

WSL

mainf7180aade00c232a67origin/main3f903amain

Gitlab

mainf7180aade00c232a67main

Fes un push al repositori remot per publicar els canvis:

WSL

mainf7180aade00c232a673f903aorigin/mainmain

Gitlab

mainf7180aade00c232a673f903amain

Fetch

Windows

Mira que diu git de l’estat del repositori en la màquina windows:

Terminal window
git status

Pots veure que la branca main està sincronitzada amb origin/main:

On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean

Encara que tu saps que no és així perquè tu has fet uns canvis amb la màquina WSL.

WSL

mainf7180aade00c232a673f903aorigin/mainmain

Gitlab

mainf7180aade00c232a673f903amain

Windows

mainf7180aade00corigin/mainmain

Fes un fetch de la branca origin/main per veure si hi ha canvis nous al repositori remot.

Terminal window
git fetch
From gitlab.com:ddemingo/poesia
ade00c..3f903a5 main -> origin/main

Pots veure que es baixen els nous commits del repositori remot.

Però aquests canvis no són visibles perquè el HEAD segueix apuntant al mateix commit:

Terminal window
git log
commit ade00cb5328c1e91fd2d194ff315e7f25653f27c
Author: David de Mingo <david@optersoft.com>
Date: Fri Oct 3 14:25:48 2025 +0200
Afegit primera estrofa del poema 'Ara mateix' de Miquel Martí i Pol

Si indiques a git log que a d’utilitzar el punter origin/main pots veure els nous canvis:

Terminal window
git log origin/main
commit 3f903a57bfc9d3671396c12263991bccc27c34a6 (origin/main, origin/HEAD)
Author: David de Mingo <david@optersoft.com>
Date: Thu Oct 23 12:30:05 2025 +0200
Afegit poema 'la vaca cega' amb la primera estrofa
commit 232a67578f14faf7b44728a40a94275b36326d0e (HEAD -> main)
Author: David de Mingo <david@optersoft.com>
Date: Thu Oct 23 11:58:50 2025 +0200
Afegit nova estrofa a 'Ara mateix'

Windows

mainf7180aade00cmain232a673f903aorigin/main

Pots canviar a origin/main amb la comanda git checkout:

Terminal window
git checkout origin/main
ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23/10/2025 12:05 500 ara-mateix.txt
-a---- 23/10/2025 13:02 114 la-vaca-cega.txt
-a---- 23/10/2025 12:05 6205 README.md

Pots tornar a main amb la comanda git checkout:

Terminal window
git checkout main
ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23/10/2025 13:07 196 ara-mateix.txt
-a---- 23/10/2025 12:05 6205 README.md

Merge

Si els canvis et semblen bé pots fer un merge:

Terminal window
git merge origin/main

Després del merge main i origin/main tornen a coincidir:

Windows

mainf7180aade00c232a673f903aorigin/mainmain

I si ara fas un git log pots veure que tots els punters apunten al mateix commit:

Terminal window
git log n -1
commit 3f903a57bfc9d3671396c12263991bccc27c34a6 (HEAD, origin/main, origin/HEAD)
Author: David de Mingo <david@optersoft.com>
Date: Thu Oct 23 12:30:05 2025 +0200
Afegit poema 'la vaca cega' amb la primera estrofa

Pull

Si estas segur dels canvis i no vols revisar res, pots utilitzar la comanda git pull que fa un fetch i un merge a la vegada:

Windows

Afegeix una nova estrofa al poema la-vaca-cega.txt:

Fes un commit del canvi i un push al repositori remot:

WSL

Ara anirem de pressa sense verificar res amb la comanda git pull:

Conflicte

Fina ara tot ha anat molt bé perquè no hem fet canvis que s’encavalquin.

WSL

Modifica el fitxer la-vaca-cega.txt:

Ve a abeurar-se a la font com ans solia,
mes no amb el ferm posat d'altres vegades
ni amb ses companyes, no; ve tota sola.

Fes un commit del canvi i un push al repositori remot.

Windows

Modifica el fitxer la-vaca-cega.txt:

Ve a abeurar-se a la font com ans solia,
mes no amb el ferm posat d'altres vegades
ni amb ses companyes, no; ve tota sola.

Fes un commit del canvi i un push al repositori remot.

Terminal window
git commit -a -m "Afegida estrofa a 'la vaca cega'"
git push
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'gitlab.com:ddemingo/poesia.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Git rebutja fer el push perquè el repositori remot té un commit que apunta al mateix commit que tens referenciat amb origin/main.

Gitlab

mainf7180aade00c232a673f903a701a31342b74main

Windows

mainf7180aade00c232a673f903a701a31origin/mainccadaamain
Terminal window
git log -n 2
commit ccadaac446c970578a09f04b919ab0cbea152c02 (HEAD -> main)
Author: David de Mingo <david@optersoft.com>
Date: Thu Oct 23 13:33:59 2025 +0200
Afegida estrofa a 'la vaca cega'
commit 701a314c792e0728d9f5d4e368ff9e6045b55c9b (origin/main, origin/HEAD)
Author: David de Mingo <david@optersoft.com>
Date: Thu Oct 23 13:23:17 2025 +0200

El que has de fer en aquesta situació és:

  • Crear una branca nova per conservar els teus canvis.
  • Un “reset” de la teva branca principal a l’estat en què està la branca origin/main
  • Un pull del repositori remot
Terminal window
git branch conflict
git reset --hard origin/main
git pull

Windows

mainconflictf7180aade00c232a673f903a701a31ccadaa342b74origin/mainmain

Resoldre el conflicte

Fes un merge de la branca conflict

Terminal window
git merge conflict

El resultat de la comanda ens indica que tenim un conflicte en el fitxer la-vaca-cega.txt que git no pot resoldre de manera automàtica:

Auto-merging la-vaca-cega.txt
CONFLICT (content): Merge conflict in la-vaca-cega.txt
Automatic merge failed; fix conflicts and then commit the result.

Que git no sàpida resoldre el conflicte no vol dir que no sàpiga exactament quin és el conflicte.

Edita el fitxer la-vaca-cega.txt

Topant de cap en una i altra soca,
avançant d'esma pel camí de l'aigua,
se'n ve la vaca tota sola. És cega.
D'un cop de roc llançat amb massa traça,
el vailet va buidar-li un ull, i en l'altre
se li ha posat un tel: la vaca és cega.
<<<<<<< HEAD
Ve a abeurar-se a la font com ans solia,
mes no amb el ferm posat d'altres vegades
ni amb ses companyes, no; ve tota sola.
=======
Ses companyes, pels cingles, per les comes,
el silenci dels prats i en la ribera,
fan dringar l'esquellot, mentre pasturen
l'herba fresca a l'atzar... ella cauria.
>>>>>>> conflict

Git indica clarament en el fitxer la-vaca-cega.txt quin és el conflicte: la tercera estrofa és diferent.

Resol el conflicte preservant el que ha de ser la quarta estrofa com la quarta estrofa.

Topant de cap en una i altra soca,
avançant d'esma pel camí de l'aigua,
se'n ve la vaca tota sola. És cega.
D'un cop de roc llançat amb massa traça,
el vailet va buidar-li un ull, i en l'altre
se li ha posat un tel: la vaca és cega.
Ve a abeurar-se a la font com ans solia,
mes no amb el ferm posat d'altres vegades
ni amb ses companyes, no; ve tota sola.
Ses companyes, pels cingles, per les comes,
el silenci dels prats i en la ribera,
fan dringar l'esquellot, mentre pasturen
l'herba fresca a l'atzar... ella cauria.

Un cop resolt el conflicte ja pots fer el commit i el push corresponent:

Terminal window
git commit -a -m "Acceptat la tercera estrofa, la nova serà la quarta"
git push

Windows

mainconflictf7180aade00c232a673f903a701a31ccadaa342b74origin/mainmain

Esborra la branca conflict que ja no et fa falta.

Terminal window
$ git branch -d conflict

Auto-merging

Projecte

  • Renombrar repo
  • Canviar url
  • Borrar repo

Activitats

ssh

Borra la clau ssh:

Terminal window
rm -r -force ~/.ssh

Crea una nova clau ssh, elimina l’antiga de Gitlab i afegeix la nova.

Verifica que la nova funciona.

Pendent