En aquest punt, podem començar a desenvolupar les diferents funcionalitats del projecte
en branques independents.
Crearem un repositori local per a cada desenvolupador,
simulant que cadascú treballa en el seu dispositiu.
jpuigcerver@fp:~/git_estrategies/remot(main)$cd~/git_estrategies
jpuigcerver@fp:~/git_estrategies$gitcloneremotanna
Cloning into 'anna'...done.jpuigcerver@fp:~/git_estrategies$gitcloneremotpau
Cloning into 'pau'...done.jpuigcerver@fp:~/git_estrategies$gitcloneremotmar
Cloning into 'mar'...done.jpuigcerver@fp:~/git_estrategies$gitcloneremotcarles
Cloning into 'carles'...done.jpuigcerver@fp:~/git_estrategies$tree.
.├── anna│ └── README.md├── carles│ └── README.md├── mar│ └── README.md├── pau│ └── README.md└── remot └── README.md6 directories, 5 files
Cada desenvolupador començarà a treballar en una nova funcionalitat.
Anna treballarà en la funcionalitat feature/readme, que consistirà a afegir una descripció del projecte al README.
Pau treballarà en la funcionalitat feature/license, que consistirà a afegir una llicència al projecte.
Mar treballarà en la funcionalitat feature/author, que consistirà a afegir el nom dels autors del projecte al README.
A partir d'aquest moment, cada desenvolupador treballarà en el seu propi repositori,
en la seua pròpia branca de funcionalitat de manera independent i paral·lela.
Important
És important que cada desenvolupador treballe en una única branca per funcionalitat, i que una mateixa branca no es compartisca entre desenvolupadors.
Si existeix la necessitat de compartir una branca, segurament siga perquè la funcionalitat no està ben definida i podrà ser dividida en diverses funcionalitats més xicotetes.
Anna començarà a treballar en la seua funcionalitat feature/readme en el seu repositori local.
Nota
Configurem l'usuari i el correu electrònic per a cada repositori local
per simular que cada desenvolupador treballa en el seu propi dispositiu.
També es mostra el nom en el prompt.
anna@fp:~/git_estrategies$cd~/git_estrategies/anna
anna@fp:~/git_estrategies/anna(main)$gitconfiguser.name"Anna"anna@fp:~/git_estrategies/anna(main)$gitconfiguser.email"anna@fpmislata.com"anna@fp:~/git_estrategies/anna(main)$gitcheckoutdevelop
branch 'develop' set up to track 'origin/develop'.Switched to a new branch 'develop'anna@fp:~/git_estrategies/anna(develop)$gitcheckout-bfeature/readme
Switched to a new branch 'feature/readme'anna@fp:~/git_estrategies/anna(feature/readme)$echo"Les estratègies de ramificació proporcionen un">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$echo"marc de treball organitzat que facilita la col·laboració">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$echo"entre diferents desenvolupadors en un mateix projecte">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$gitcommit-a-m"README.md: Descripció"[feature/readme 502dadb] README.md: Descripció 1 file changed, 3 insertions(+)anna@fp:~/git_estrategies/anna(feature/readme)$echo"">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$echo"La característica principal és la utilització">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$echo"de branques amb un únic propòsit.">>README.md
anna@fp:~/git_estrategies/anna(feature/readme)$gitcommit-a-m"README.md: Branques propòsit únic"[feature/readme ea2559a] README.md: Branques propòsit únic 1 file changed, 3 insertions(+)anna@fp:~/git_estrategies/anna(feature/readme)$gitpush-uoriginfeature/readme
branch 'feature/readme' set up to track 'origin/feature/readme'.To ~/git_estrategies/remot * [new branch] feature/readme -> feature/readmeanna@fp:~/git_estrategies/anna(feature/readme)$gitlga
*ea2559a-(0 seconds ago)README.md: Branques propòsit únic-Anna(HEAD -> feature/readme, origin/feature/readme)*502dadb-(0 seconds ago)README.md: Descripció-Anna*ec0e2bd-(0 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/develop, origin/HEAD, main, develop)
Els passos seguits per Anna són:
Crear la branca feature/readme a partir de develop.
Realitzar els canvis pertinents.
Publicar la branca feature/readme al repositori remot.
En aquest punt, les tres funcionalitats han sigut desenvolupades de manera independent,
i encara no han segut integrades a la branca de desenvolupament develop.
jpuigcerver@fp:~/git_estrategies$cd~/git_estrategies/remot
jpuigcerver@fp:~/git_estrategies/remot(main)$gitlga
*a216550-(0 seconds ago)Autors: Mar-Mar(feature/author)*1d5ba44-(0 seconds ago)Autors: Pau-Mar*8683319-(0 seconds ago)Autors: Anna-Mar*24be503-(0 seconds ago)README.md: Secció d'autors-Mar| *c213387-(0 seconds ago)LICENSE: Enllaç a la llicència-Pau(feature/license)| *b11b498-(0 seconds ago)LICENSE: Afegida llicència-Pau|/ | *ea2559a-(1 second ago)README.md: Branques propòsit únic-Anna(feature/readme)| *502dadb-(1 second ago)README.md: Descripció-Anna|/ *ec0e2bd-(1 second ago)Commit inicial-Joan Puigcerver(HEAD -> main, develop)
Preparació del repositori
Pots crear un repositor amb l'estat anterior executant el següent script:
Bash script amb el desenvolupament de les funcionalitats
#!/bin/bash# Elimina els repositoris si existeixenif[-d~/git_estrategies];thenrm-rf~/git_estrategies
fi# Inicialització del repositori remotmkdir-p~/git_estrategies/remot
cd~/git_estrategies/remot
gitinit
gitbranch-mmain
echo"# Estratègies de ramificació">README.md
gitaddREADME.md
gitcommit-m"Commit inicial"gitconfig--boolcore.baretrue# (1)!# Inicialització del repositori de desenvolupamentgitbranchdevelop
# Clonació del repositoricd~/git_estrategies
gitcloneremotanna
gitcloneremotpau
gitcloneremotmar
gitcloneremotcarles
# Desenvolupament de la branca feature/readmecd~/git_estrategies/anna
gitconfiguser.name"Anna"gitconfiguser.email"anna@fpmislata.com"gitcheckoutdevelop
gitcheckout-bfeature/readme
echo"Les estratègies de ramificació proporcionen un">>README.md
echo"marc de treball organitzat que facilita la col·laboració">>README.md
echo"entre diferents desenvolupadors en un mateix projecte">>README.md
gitcommit-a-m"README.md: Descripció"echo"">>README.md
echo"La característica principal és la utilització">>README.md
echo"de branques amb un únic propòsit.">>README.md
gitcommit-a-m"README.md: Branques propòsit únic"gitpush-uoriginfeature/readme
# Desenvolupament de la branca feature/licensecd~/git_estrategies/pau
gitconfiguser.name"Pau"gitconfiguser.email"pau@fpmislata.com"gitcheckoutdevelop
gitcheckout-bfeature/license
echo"">LICENSE
echo"## Llicència">>LICENSE
echo"CC BY-NC-SA 4.0 DEED - Reconeixement-NoComercial-CompartirIgual 4.0 Internacional">>LICENSE
gitaddLICENSE
gitcommit-m"LICENSE: Afegida llicència"echo"">>LICENSE
echo"Més informació: https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca">>LICENSE
gitcommit-a-m"LICENSE: Enllaç a la llicència"gitpush-uoriginfeature/license
# Desenvolupament de la branca feature/authorcd~/git_estrategies/mar
gitconfiguser.name"Mar"gitconfiguser.email"mar@fpmislata.com"gitcheckoutdevelop
gitcheckout-bfeature/author
echo"">>README.md
echo"## Autors">>README.md
gitcommit-a-m"README.md: Secció d'autors"echo"- Anna (anna@fpmislata.com)">>README.md
gitcommit-a-m"Autors: Anna"echo"- Pau (pau@fpmislata.com)">>README.md
gitcommit-a-m"Autors: Pau"echo"- Mar (mar@fpmislata.com)">>README.md
gitcommit-a-m"Autors: Mar"gitpush-uoriginfeature/author
cd~/git_estrategies
Anem a veure com integrar les funcionalitats amb la tècnica merge + merge --squash
seguint el procés indicat a Integració de les funcionalitats.
Anna ja ha acabat la seua funcionalitat feature/readme i vol integrar-la a la branca develop.
Els passos que ha de seguir són:
Sincronitzar l'estat del repositori local amb el remot amb git fetch.
anna@fp:~/git_estrategies$cd~/git_estrategies/anna
anna@fp:~/git_estrategies/anna(feature/readme)$gitfetch
From ~/git_estrategies/remot * [new branch] feature/author -> origin/feature/author * [new branch] feature/license -> origin/feature/licenseanna@fp:~/git_estrategies/anna(feature/readme)$gitlga
*a216550-(1 second ago)Autors: Mar-Mar(origin/feature/author)*1d5ba44-(1 second ago)Autors: Pau-Mar*8683319-(1 second ago)Autors: Anna-Mar*24be503-(1 second ago)README.md: Secció d'autors-Mar| *c213387-(1 second ago)LICENSE: Enllaç a la llicència-Pau(origin/feature/license)| *b11b498-(1 second ago)LICENSE: Afegida llicència-Pau|/ | *ea2559a-(2 seconds ago)README.md: Branques propòsit únic-Anna(HEAD -> feature/readme, origin/feature/readme)| *502dadb-(2 seconds ago)README.md: Descripció-Anna|/ *ec0e2bd-(2 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/develop, origin/HEAD, main, develop)
Actualitzar la branca develop amb els canvis del remot.
En aquest cas, ja està actualitzada.
anna@fp:~/git_estrategies/anna(feature/readme)$gitcheckoutdevelop
Your branch is up to date with 'origin/develop'.Switched to branch 'develop'anna@fp:~/git_estrategies/anna(develop)$gitpull--ff-only
Already up to date.
Actualitzar la branca feature/readme amb els canvis develop.
En aquest cas, ja està actualitzada.
anna@fp:~/git_estrategies/anna(develop)$gitcheckoutfeature/readme
Your branch is up to date with 'origin/feature/readme'.Switched to branch 'feature/readme'anna@fp:~/git_estrategies/anna(feature/readme)$gitmerge--no-ff--no-editdevelop#(1)!Already up to date.
L'opció --no-edit evita obrir l'editor de text i deixa el missatge de commit per defecte.
Fusionar la branca feature/readme amb develop.
anna@fp:~/git_estrategies/anna(feature/readme)$gitcheckoutdevelop
Your branch is up to date with 'origin/develop'.Switched to branch 'develop'anna@fp:~/git_estrategies/anna(develop)$gitmerge--squashfeature/readme
Updating ec0e2bd..ea2559aFast-forwardSquash commit -- not updating HEAD README.md | 6 ++++++ 1 file changed, 6 insertions(+)anna@fp:~/git_estrategies/anna(develop)$gitstatus
On branch developYour branch is up to date with 'origin/develop'.Changes to be committed: (use "git restore --staged <file>..." to unstage)modified: README.mdanna@fp:~/git_estrategies/anna(develop)$gitdiff--staged
diff --git a/README.md b/README.mdindex 05c1f5b..9e7f142 100644--- a/README.md+++ b/README.md@@ -1 +1,7 @@# Estratègies de ramificació
+Les estratègies de ramificació proporcionen un+marc de treball organitzat que facilita la col·laboració+entre diferents desenvolupadors en un mateix projecte++La característica principal és la utilització+de branques amb un únic propòsit.anna@fp:~/git_estrategies/anna(develop)$gitcommit-m"Merge branch 'feature/readme'"[develop 2bc4029] Merge branch 'feature/readme' 1 file changed, 6 insertions(+)anna@fp:~/git_estrategies/anna(develop)$gitlga
*2bc4029-(0 seconds ago)Merge branch 'feature/readme'-Anna(HEAD -> develop)| *a216550-(1 second ago)Autors: Mar-Mar(origin/feature/author)| *1d5ba44-(1 second ago)Autors: Pau-Mar| *8683319-(1 second ago)Autors: Anna-Mar| *24be503-(1 second ago)README.md: Secció d'autors-Mar|/ | *c213387-(1 second ago)LICENSE: Enllaç a la llicència-Pau(origin/feature/license)| *b11b498-(1 second ago)LICENSE: Afegida llicència-Pau|/ | *ea2559a-(2 seconds ago)README.md: Branques propòsit únic-Anna(origin/feature/readme, feature/readme)| *502dadb-(2 seconds ago)README.md: Descripció-Anna|/ *ec0e2bd-(2 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/develop, origin/HEAD, main)
Publicar els canvis de la branca develop al repositori remot.
anna@fp:~/git_estrategies/anna(develop)$gitpush
To ~/git_estrategies/remot ec0e2bd..2bc4029 develop -> developanna@fp:~/git_estrategies/anna(develop)$gitlga
*2bc4029-(0 seconds ago)Merge branch 'feature/readme'-Anna(HEAD -> develop, origin/develop)| *a216550-(1 second ago)Autors: Mar-Mar(origin/feature/author)| *1d5ba44-(1 second ago)Autors: Pau-Mar| *8683319-(1 second ago)Autors: Anna-Mar| *24be503-(1 second ago)README.md: Secció d'autors-Mar|/ | *c213387-(1 second ago)LICENSE: Enllaç a la llicència-Pau(origin/feature/license)| *b11b498-(1 second ago)LICENSE: Afegida llicència-Pau|/ | *ea2559a-(2 seconds ago)README.md: Branques propòsit únic-Anna(origin/feature/readme, feature/readme)| *502dadb-(2 seconds ago)README.md: Descripció-Anna|/ *ec0e2bd-(2 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/HEAD, main)
Eliminar la branca feature/readme del repositori local i del remot.
anna@fp:~/git_estrategies/anna(develop)$gitbranch-Dfeature/readme
Deleted branch feature/readme (was ea2559a).anna@fp:~/git_estrategies/anna(develop)$gitpushorigin--deletefeature/readme
To ~/git_estrategies/remot - [deleted] feature/readmeanna@fp:~/git_estrategies/anna(develop)$gitlga
*2bc4029-(0 seconds ago)Merge branch 'feature/readme'-Anna(HEAD -> develop, origin/develop)| *a216550-(1 second ago)Autors: Mar-Mar(origin/feature/author)| *1d5ba44-(1 second ago)Autors: Pau-Mar| *8683319-(1 second ago)Autors: Anna-Mar| *24be503-(1 second ago)README.md: Secció d'autors-Mar|/ | *c213387-(1 second ago)LICENSE: Enllaç a la llicència-Pau(origin/feature/license)| *b11b498-(1 second ago)LICENSE: Afegida llicència-Pau|/ *ec0e2bd-(2 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/HEAD, main)
En aquest punt, la funcionalitat desenvolupada per Anna
ha sigut integrada a la branca de desenvolupament develop
i pot continuar treballant en altres funcionalitats.
Actualitzar la branca develop amb els canvis del remot.
mar@fp:~/git_estrategies/mar(feature/author)$gitcheckoutdevelop
Your branch is behind 'origin/develop' by 2 commits, and can be fast-forwarded. (use "git pull" to update your local branch)Switched to branch 'develop'mar@fp:~/git_estrategies/mar(develop)$gitpull--ff-only
Updating ec0e2bd..b7bf0a5Fast-forward LICENSE | 5 +++++ README.md | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 LICENSEmar@fp:~/git_estrategies/mar(develop)$gitlga
*b7bf0a5-(1 second ago)Merge branch 'feature/license'-Pau(HEAD -> develop, origin/develop)*2bc4029-(2 seconds ago)Merge branch 'feature/readme'-Anna| *a216550-(3 seconds ago)Autors: Mar-Mar(origin/feature/author, feature/author)| *1d5ba44-(3 seconds ago)Autors: Pau-Mar| *8683319-(3 seconds ago)Autors: Anna-Mar| *24be503-(3 seconds ago)README.md: Secció d'autors-Mar|/ *ec0e2bd-(4 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/HEAD, main)
Actualitzar la branca feature/author amb els canvis develop.
Info
En aquest cas, han sorgit conflictes que hem hagut de solucionar manualment.
mar@fp:~/git_estrategies/mar(develop)$gitcheckoutfeature/author
Your branch is up to date with 'origin/feature/author'.Switched to branch 'feature/author'mar@fp:~/git_estrategies/mar(feature/author)$gitmerge--no-ff--no-editdevelop# (1)!Auto-merging README.mdCONFLICT (content): Merge conflict in README.mdAutomatic merge failed; fix conflicts and then commit the result.mar@fp:~/git_estrategies/mar(feature/author|MERGING)$vimREADME.md# (2)!mar@fp:~/git_estrategies/mar(feature/author|MERGING)$gitaddREADME.md
mar@fp:~/git_estrategies/mar(feature/author|MERGING)$gitcommit--no-edit# (1)![feature/author 72afb5a] Merge branch 'develop' into feature/authormar@fp:~/git_estrategies/mar(feature/author)$gitlga
*72afb5a-(0 seconds ago)Merge branch 'develop' into feature/author-Mar(HEAD -> feature/author)|\ | *b7bf0a5-(1 second ago)Merge branch 'feature/license'-Pau(origin/develop, develop)| *2bc4029-(2 seconds ago)Merge branch 'feature/readme'-Anna* |a216550-(3 seconds ago)Autors: Mar-Mar(origin/feature/author)* |1d5ba44-(3 seconds ago)Autors: Pau-Mar* |8683319-(3 seconds ago)Autors: Anna-Mar* |24be503-(3 seconds ago)README.md: Secció d'autors-Mar|/ *ec0e2bd-(4 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/HEAD, main)
L'opció --no-edit evita obrir l'editor de text i deixa el missatge de commit per defecte.
S'han esborrat les marques de conflicte manualment.
Fusionar la branca feature/author amb develop.
mar@fp:~/git_estrategies/mar(feature/author)$gitcheckoutdevelop
Your branch is up to date with 'origin/develop'.Switched to branch 'develop'mar@fp:~/git_estrategies/mar(develop)$gitmerge--squashfeature/author
Updating b7bf0a5..72afb5aFast-forwardSquash commit -- not updating HEAD README.md | 5 +++++ 1 file changed, 5 insertions(+)mar@fp:~/git_estrategies/mar(develop)$gitstatus
On branch developYour branch is up to date with 'origin/develop'.Changes to be committed: (use "git restore --staged <file>..." to unstage)modified: README.mdmar@fp:~/git_estrategies/mar(develop)$gitdiff--staged
diff --git a/README.md b/README.mdindex 9e7f142..416ca41 100644--- a/README.md+++ b/README.md@@ -1,4 +1,9 @@# Estratègies de ramificació
++## Autors+- Anna (anna@fpmislata.com)+- Pau (pau@fpmislata.com)+- Mar (mar@fpmislata.com)Les estratègies de ramificació proporcionen un
marc de treball organitzat que facilita la col·laboració
entre diferents desenvolupadors en un mateix projecte
mar@fp:~/git_estrategies/mar(develop)$gitcommit-m"Merge branch 'feature/author'"[develop f9152dc] Merge branch 'feature/author' 1 file changed, 5 insertions(+)mar@fp:~/git_estrategies/mar(develop)$gitlga
*f9152dc-(0 seconds ago)Merge branch 'feature/author'-Mar(HEAD -> develop)| *72afb5a-(0 seconds ago)Merge branch 'develop' into feature/author-Mar(feature/author)| |\ | |/ |/| * |b7bf0a5-(1 second ago)Merge branch 'feature/license'-Pau(origin/develop)* |2bc4029-(2 seconds ago)Merge branch 'feature/readme'-Anna| *a216550-(3 seconds ago)Autors: Mar-Mar(origin/feature/author)| *1d5ba44-(3 seconds ago)Autors: Pau-Mar| *8683319-(3 seconds ago)Autors: Anna-Mar| *24be503-(3 seconds ago)README.md: Secció d'autors-Mar|/ *ec0e2bd-(4 seconds ago)Commit inicial-Joan Puigcerver(origin/main, origin/HEAD, main)
Publicar els canvis de la branca develop al repositori remot.