Type to search…

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

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

ps
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:

ps
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:

ps
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:

ps
cd poesia
notepad ara-mateix.txt

Fes el commit corresponent:

ps
git add .\ara-mateix.txt
git commit -a -m "Afegit primera estrofa del poema 'Ara mateix' de Miquel Martí i Pol"
ps
[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:

ps
git remote -v
ps
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:

ps
git push
ps
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.

Show solution
shell
ssh-keygen

Afegeix la clau pública a Gitlab.

Clone el projecte:

Show solution
shell
git clone git@gitlab.com:ddemingo/poesia.git
Afegir una estrofa

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

Show solution
shell
nano ara-mateix.txt
De res a poc, i sempre amb vent de cara,
quin llarg camí d'angoixa i de silencis.
I som on som; més val saber-ho i dir-ho
i assentar els peus en terra i proclamar-nos
hereus d'un temps de dubtes i renúncies
en què els sorolls ofeguen les paraules
i amb molts miralls mig estrafem la vida.

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

Show solution
shell
git commit -a -m "Afegit nova estrofa a 'Ara mateix'"
git push
Afegir un poema

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

Show solution
shell
nano 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.

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

Show solution
shell
git add la-vaca-cega.txt
git commit -m "Afegit poema 'la vaca cega' amb la primera estrofa"

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

Gitlab

Fes un push al repositori remot per publicar els canvis:

Show solution
ps
git push

WSL

Gitlab

Fetch

Windows

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

ps
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

Gitlab

Windows

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

ps
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:

ps
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:

ps
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

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

ps
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:

shell
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:

shell
git merge origin/main

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

Windows

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

ps
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:

Show solution
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.

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

Show solution
shell
git commit -a -m "Afegit nova estrofa a 'la vaca cega'"
git push
To gitlab.com:ddemingo/poesia.git
3f903a5..701a314  main -> main
WSL

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

Show solution
shell
git pull
From gitlab.com:ddemingo/poesia
3f903a5..701a314  main       -> origin/main
Updating 3f903a5..701a314

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.

ps
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

Windows

ps
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
ps
git branch conflict
git reset --hard origin/main
git pull

Windows

Resoldre el conflicte

Fes un merge de la branca conflict

ps
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:

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

Windows

Esborra la branca conflict que ja no et fa falta.

shell
$ git branch -d conflict

Auto-merging

Projecte

  • Renombrar repo
  • Canviar url
  • Borrar repo

Activitats

ssh

Borra la clau ssh:

ps
rm -r -force ~/.ssh

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

Verifica que la nova funciona.

Pendent