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
    Nota

    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