Créer des branches
Définition : Branche
Une branche est une divergence effectuée pour travailler séparément sur des fonctionnalités différentes.
Jusqu'à maintenant, on s'est contentés de travailler sur une seule branche.
Fondamental : Intérêt des branches
Gestion séparée des fonctionnalités
Meilleure compréhensibilité des changements
Meilleure traçabilité des bugs.
Méthode : Création d'un projet (dépôt distant)
Pour le Gitlab de l'UTC :
Se rendre sur https://gitlab.utc.fr
Une fois connecté avec ses identifiants CAS, il suffit d'appuyer sur le bouton « New project » et de renseigner un nom et un niveau de visibilité
Pour git, qu'est-ce qu'une branche ?
Pour git, une branche, c'est une étiquette un peu spéciale, sur laquelle on peut faire un peu plus d'opérations que d'habitude.
On peut se déplacer, effectuer un diff, un show
Fondamental : La branche master
La branche master est la branche principale du projet. Elle est créée automatiquement au départ du projet et sa tête devrait être une versions fonctionnelle du projet.
Créer des branches et les utiliser
Méthode : Créer une branche
La manière commune de créer une branche est d'utiliser
git branch ma_branche
Il existe d'autres manières de créer une branche, comme par exemple
git checkout -b ma_branche master
Cette commande dit :
Déplace toi sur la branche ma_branche.
l'option -b indique que la branche ma_branche n'existe pas et qu'il faut la créer.
master est le point de départ de la branche.
Définition : Faire un commit sur une branche
Soit une branche ma_branche ayant pour dernier commit mon_commit, faire un nouveau commit sur la branche ma_branche signifie
Créer un commit fils au commit mon_commit
Déplacer l'étiquette de la branche sur le nouveau commit
Méthode : Vérifier la branche sur laquelle on est
Pour vérifier la branche sur laquelle on est on peut utiliser la commande git branch sans utiliser d'argument. Elle liste toutes les branches disponibles et met une étoile sur la branche master
Conseil : Ne plus avoir à vérifier la branche sur laquelle on est
Il existe de nombreuses manières de changer son prompt pour qu'il affiche en permanence l'état du dépôt sur lequel on est. Et notamment la branche sur laquelle on est.
Application
Créez un dossier init_git et créez-y un dépôt git. Mettez-y un fichier toto.txt. Commitez les modifications. Ensuite, créez trois branches et déplacez vous
mkdir init_git
cd init_git
git init
touch toto.txt
git add toto.txt
git commit -m "premier commit"
git branch alice
git branch bob
git checkout -b charlie
Ajoutez une ligne contenant "pomme" dans votre fichier aller sur la branche alice et constater que le changement n'est pas fait sur la nouvelle branche
echo "pomme" >> toto.txt
cat toto.txt
git commit -am "Add pomme to toto.txt"
git checkout alice
cat toto.txt
La fusion de branches
Méthode : Fusion de branches
Fusionner des branches, c'est réunir le travail de deux personnes différentes en une seule, pour le faire, on utilise la commande git merge, celle-ci crée en général un commit de fusion
Remarque :
Le commit de fusion est le seul type de commit qui puisse avoir deux parents.
Syntaxe :
git merge target_branch
La commande précédente met toutes les modifications de la branche cible dans la branche courante.
Défi : Veille
Reprenez votre dépôt et executez les commandes suivantes. Que font-elles ? Fusionnez les deux branches
git checkout alice
touch alicefile.txt
git add alicefile.txt
git commit -m "Create file for alice"
git checkout bob
touch bobfile.txt
git add bobfile.txt
git commit -m "Create file for bob"
Vous êtes encore dans la branche de bob, pour fusionner la branche de Alice dans celle de Bob, il faut utiliser git merge
git merge alice
Rattraper son retard
Définition : Rebaser
Rebaser, c'est réorganiser son historique et ses étiquettes.
Fondamental : Rattraper son retard
Pour rattraper son retard sur une branche distante, on effectue souvent un rebase.
Ce rebase prend l'ensemble des commits de la branche cible et les intègre dans l'historique de la branche courante.
Attention : Le rebase est à consommer avec modération
Rebase, c'est modifier son historique, et c'est donc prendre le risque de ne plus être synchronisé avec les dépôts distants, c'est donc à utiliser avec beaucoup de précautions.
Exemple : Un rebase simple
Si vous avez du retard sur une branche mais que vous n'avez rien fait, vous pouvez rebase sans problèmes.
Exemple : Un rebase un peu plus complexe
Si vous avez du retard sur une branche et que vous avez effectué des commits, c'est un peu plus risqué, mais pas de panique
Exemple : Un rebase pour la forme
Le rebase, c'est aussi ça. Mais on ne va pas s'y appesantir.
Défi : Veille
Retournez dans votre dépôt. Charlie est en retard sur alice et bob, faites lui rattraper son retard.
git checkout charlie
git rebase alice
Que font les commandes suivantes ?
git checkout alice
echo "poire" >> alicefile.txt
git commit -am "Update fruits for alicefile"
git checkout bob
echo "banane" >> alicefile.txt
git commit -am "Update fruits for alicefile"
Effectuez un merge de alice dans bob
Souvenez vous de la gestion de conflits.
La gestion des branches avec git
Que fait la commande
git checkout -b ma_branche
Elle crée une branche ma_branche si ma_branche n'existe pas
Elle écrase la branche ma_branche avec une nouvelle si ma_branche existe
Elle me déplace vers la branche ma_branche si celle-ci n'existait pas avant
Elle me déplace vers la branche ma_branche si celle-ci existait déjà avant
Quelles phrases sont vraies
La commande "git branch -D ma_branche" crée une branche nommée ma_branche
La commande "git merge alice" fusionne la branche courante avec la branche alice
La commande "git rebase" est une commande dangereuse
Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches
La gestion arborescente est une spécificité de git
C'est une bonne idée de rebase si...
Je n'ai pas produit de nouvelles versions depuis longtemps et les autres ont beaucoup avancé
J'ai effectué des modifications majeures et je dois les incorporer à un projet avant de push
J'ai effectué des modifications mineures et je dois les incorporer à un projet avant de push
La branche master a vocation à :
Contenir à terme une très large partie des commits
Être fonctionnelle à tout moment
Contenir la version la plus avancée du projet, qu'elle soit stable ou non
servir de base pour les versions publiées d'un projet
Elle crée une branche ma_branche si ma_branche n'existe pas
Elle écrase la branche ma_branche avec une nouvelle si ma_branche existe
Elle me déplace vers la branche ma_branche si celle-ci n'existait pas avant
Elle me déplace vers la branche ma_branche si celle-ci existait déjà avant
Git checkotu -b créera une branche ma_branche et vous y déplacera. Si elle détecte que la branche existe déjà, elle renvoie une erreur et ne fait rien.
Quelles phrases sont vraies
La commande "git branch -D ma_branche" crée une branche nommée ma_branche
La commande "git merge alice" fusionne la branche courante avec la branche alice
La commande "git rebase" est une commande dangereuse
Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches
La gestion arborescente est une spécificité de git
La commande "git branch -D ma_branche" crée une branche nommée ma_branche
Cette commande SUPPRIME la branche ma_branche
La commande "git merge alice" fusionne la branche courante avec la branche alice
La commande "git rebase" est une commande dangereuse
Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches
Il est tout à fait normal de devoir gérer des conflits quand certaines personnes doivent travailler dans la même partie du code.
La gestion arborescente est une spécificité de git
Pouvoir gérer des versions en arborescence est une fonctionnalité de base de beaucoup de gestionnaires de version.
C'est une bonne idée de rebase si...
Je n'ai pas produit de nouvelles versions depuis longtemps et les autres ont beaucoup avancé
J'ai effectué des modifications majeures et je dois les incorporer à un projet avant de push
J'ai effectué des modifications mineures et je dois les incorporer à un projet avant de push
La branche master a vocation à :
Contenir à terme une très large partie des commits
Être fonctionnelle à tout moment
Contenir la version la plus avancée du projet, qu'elle soit stable ou non
servir de base pour les versions publiées d'un projet
Contenir à terme une très large partie des commits
Être fonctionnelle à tout moment
Contenir la version la plus avancée du projet, qu'elle soit stable ou non
servir de base pour les versions publiées d'un projet
C'est souvent à partir de la branche master que l'on crée des versions. Si certaines versions nécessitent des correctifs spécifiques, on a pour coutume de créer des branches spécifiques pour appliquer des correctifs à des versions spécifiques.