MP08 - UF4: Git flow i les seves branques
Exemple de git flow
Com hem vist anteriorment, per a treballar amb el git-flow cal tenir en compte que se sol treballar amb diverses branques sobre un sol projecte. Aquesta estratègia de ramificació utilitza dues branques principals (master o main i develop) i diverses branques de suport (feature, release, hotfix i support) que a diferència de les branques principals, aquestes últimes sempre tenen un temps de vida limitat, ja que seran eventualment eliminades.
El gran avantatge de git flow ** és que ens simplifica la gestió de generar noves branques i fer les fusions. Git flow conté unes comandes especials que fan la crida a les comandes bàsiques de git, de manera que amb una sola comanda git flow es realitzen diverses comandes de git. Anem a veure-ho amb un exemple des de zero.
Treballarem des de dos ordinadors diferents, o bé des del mateix, però tenint el projecte en dos directoris diferents. En el meu cas, executaré les comandes des del directori C:\DAW\MP08\projecteFlow1
i des del directori C:\DAW\MP08\projecteFlow2
simulant que estic desenvolupant sobre el mateix projecte dues característiques diferents.
Els passos que realitzarem seran els següents:
Creació del repositori al Github
Creem un repositori al Github anomenat projecteFlow
. Aquest repositori està buit. En el meu cas, l'accés al repositori és https://github.com/nbuisac/projecteFlow.git
.
Com podem veure en les instruccions que ens proposa, tenim l'opció de crear un nou repositori en la línia de comandes o bé pujar un repositori que ja tinguem.
Obrirem un CMD
al nostre PC, crearem el projecte i el pujarem amb les següents comandes.
mkdir C:\DAW\MP08\projecteFlow1
cd C:\DAW\MP08\projecteFlow1
mkdir projecteFlow
cd projecteFlow
echo "# projecteFlow" >> README.md
git flow init
Si sona error és perquè possiblement ens falta configurar algun paràmetre
Possiblement ens doni un error ja que no tenim configurades les variables user.email
i user.name
. Nosaltres les configurarem només pel projecte local, no com a variable global del sistema, de la següent forma:
git config --local user.email "you@example.com"
git config --local user.name "Your Name"
i ja podem tornar a executar la comanda
git flow init
La comanda git flow init
ens farà una sèrie de preguntes per a inicialitzar el nom de les branques. Podeu canviar el nom de master
per main
si voleu (al repositori creat segurament li hem especificat que la branca inicial és main
). Jo treballaré amb main
.
La meva execució ha estat la següent:
C:\DAW\MP08\projecteFlow1\projecteFlow>git flow init
Initialized empty Git repository in C:/DAW/MP08/projecteFlow1/projecteFlow/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master] main
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
Hooks and filters directory? [C:/DAW/MP08/projecteFlow1/projecteFlow/.git/hooks]
Una vegada hem creat la base del repositori fixeu-vos que per defecte no estem a la branca master
sinó a la branca develop
C:\...\>git branch
* develop
main
Ara ja podem afegir-hi un document i fer el primer commit i el primer push.
git add README.md
git commit -m "Commit de creacio del projecte"
git remote add origin https://github.com/nbuisac/projecteFlow.git
git push --all
push --all
i així hem pujat les dues branques a la vegada.
Una vegada fet el push
podem veure com està el nostre repositori. Hi tenim les dues branques però...
Vigila amb el push
Compte amb el push, ja que sempre l'hem de fer cap a la branca on estem, cal saber la branca de la qual en faig el push
Inici de treball del segon lloc de treball
Per a treballar des del segon lloc de treball cal preparar-ne l'entorn (arbre de directoris)
mkdir C:\DAW\MP08\projecteFlow2
cd C:\DAW\MP08\projecteFlow2
i descarregar el repositori ja pujat en el nou lloc
git clone https://github.com/nbuisac/projecteFlow.git
Cloning into 'projecteFlow'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (5/5), done.
Ara ja tenim el repositori descarregat, però ens ha creat un directori anomenat projecteFlow
com el repositori. Per tant, per a treballar amb el repositori entrarem al directori que ens ha creat.
cd projecteFlow
-
Un directori
.git
ocult amb tot el contingut que necessita el git, -
tot i que no veiem cap fitxer, això és degut al fet que estem a la branca main. Si canviem a la branca develop, veurem el fitxer
README.md
.
Cal entrar i treballar amb la branca develop.
git branch develop
A partir d'ara ja podem treballar amb el repositori, però vigilant amb els push. A cada directori s'ha de treballar en una branca diferent.
Cada característica nova hauria de residir a la seva pròpia branca, que es pot enviar al repositori central per fer una còpia de seguretat/col·laboració. Però, en lloc de ramificar-se de la branca principal, main, les branques de característiques són una subbranca de features. Quan s'ha completat una funció, es torna a fusionar amb el desenvolupament. Les característiques no haurien d'interaccionar directament amb la branca main.
Creació d'una nova feature
Per a crear una nova característica al nostre projecte crearem una nova branca a feature.
Abans de continuar amb el Projecte2 ...
Cal especificar que treballem amb el git flow fent un git flow init
.
També cal especificar les variables user.email i user.name
git config --local user.email "you@example.com"
git config --local user.name "Your Name"
Abans de continuar amb el Projecte2 ...
Cal actualitzar cadascuna de les branques amb el que hi ha al repositori, una vegada fet el init.
git switch develop
git pull origin develop
Per a crear amb git flow una branca dins de la branca features utilitzarem
git flow feature start feature_branch
- A new branch 'feature/feature_branch' was created, based on 'develop'
- You are now on branch 'feature/feature_branch'
Now, start committing on your feature. When done, use:
git flow feature finish feature_branch
feature_branch
dins la branca feature
C:...>git branch
develop
* feature/feature_branch
master
echo "Afegim una feature nova" >> README.md
echo "Nova caracteristica" > FT1.txt
git status
On branch feature/feature_branch
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
FT1.txt
no changes added to commit (use "git add" and/or "git commit -a")
git add FT1.txt
git add README.md
git commit -m "Nova feature afegida"
[feature/feature_branch 917d473] Nova feature afegida
2 files changed, 3 insertions(+), 1 deletion(-)
create mode 100644 FT1.txt
git flow feature finish feature_branch
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
Updating 209a904..917d473
Fast-forward
FT1.txt | 1 +
README.md | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
create mode 100644 FT1.txt
Deleted branch feature/feature_branch (was 917d473).
Summary of actions:
- The feature branch 'feature/feature_branch' was merged into 'develop'
- Feature branch 'feature/feature_branch' has been locally deleted
- You are now on branch 'develop'
git branch
* develop
master
C:\DAW\MP08\projecteFlow1\projecteFlow>git status
On branch develop
Your branch is ahead of 'origin/develop' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 374 bytes | 374.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://daw.institutmontilivi.cat:3000/nbuisac/projecteFlow.git
209a904..917d473 develop -> develop
Comprovem i veiem que no tenim res a fer...
git status
On branch develop
Your branch is up to date with 'origin/develop'.
nothing to commit, working tree clean
Abans de treballar una nova branca
Abans de generar una nova branca per a treballar cal assegurar-nos que tenim la darrera versió del que tenim al repositori extern. Per aixó caldria descarregar el que hi ha i barrejar-ho amb el que tenim. En teoria, un git fetch
seguit d'un git merge
. Per a fer-ho d'una sola vegada farem ús de la comanda git pull
.
git log
commit 209a904b6a8f39e8dd68128246b663984f89b852 (HEAD -> develop, origin/develop, origin/HEAD, feature)
Author: Narcis Buisac <nbuisac@institutmontilivi.cat>
Date: Thu Jan 20 13:13:27 2022 +0100
Commit de creacio del projecte
commit d247279fba9c7b371628f5ff8b18f5c49ff819a5 (origin/main)
Author: Narcis Buisac <nbuisac@institutmontilivi.cat>
Date: Thu Jan 20 13:11:56 2022 +0100
Initial commit
git pull
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), 354 bytes | 23.00 KiB/s, done.
From http://daw.institutmontilivi.cat:3000/nbuisac/projecteFlow
209a904..917d473 develop -> origin/develop
Updating 209a904..917d473
Fast-forward
FT1.txt | 1 +
README.md | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
create mode 100644 FT1.txt
git status
On branch develop
Your branch is up to date with 'origin/develop'.
nothing to commit, working tree clean
git log
commit 917d47392ca511964cc42d2ad5bc291545e8d39a (HEAD -> develop, origin/develop, origin/HEAD)
Author: Narcis Buisac <nbuisac@institutmontilivi.cat>
Date: Thu Jan 20 14:02:15 2022 +0100
Nova feature afegida
commit 209a904b6a8f39e8dd68128246b663984f89b852 (feature)
Author: Narcis Buisac <nbuisac@institutmontilivi.cat>
Date: Thu Jan 20 13:13:27 2022 +0100
Commit de creacio del projecte
commit d247279fba9c7b371628f5ff8b18f5c49ff819a5 (origin/main)
Author: Narcis Buisac <nbuisac@institutmontilivi.cat>
Date: Thu Jan 20 13:11:56 2022 +0100
Initial commit
feature
) o resolució d'errors (hotfix
) o versió de llançament (release
).
Encara fem proves o ...
Podem anar fent proves amb els repositoris o bé començar a treballar. Compte no perdeu res.
Per a tenir la versió final a la branca main
caldrà anar fusionant les branques acabades...
git switch develop
git merge feature
git switch main
git merge develop
Updating d247279..917d473
Fast-forward
FT1.txt | 1 +
README.md | 2 ++
2 files changed, 3 insertions(+)
create mode 100644 FT1.txt
create mode 100644 README.md
git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/nbuisac/projecteFlow.git
88a4221..3ed9f03 main -> main