Voici le vingt-quatrième volet de la formation Git. Dans mon précédent article, nous avons abordé une première manière de fusionner des branches lorsque nous travaillons avec un dépôt distant. Aujourd’hui nous allons voir une autre manière de faire, qui est plus adaptée au travail en équipe. Elle consiste à utiliser une fonctionnalité de la plateforme GitHub pour opérer une fusion en public. Suivez le guide.
Fusionner deux branches publiquement
Pour commencer, créez un répertoire ~/formation-git/atelier-35
pour les fichiers de notre atelier pratique :
$ cd ~/formation-git/ $ mkdir atelier-35 $ cd atelier-35
Nous allons créer la même situation de départ que dans notre précédent atelier.
- Rendez-vous sur GitHub et supprimez le dépôt
hello
(Settings > Danger Zone > Delete this repository). - Recréez un nouveau dépôt privé
hello
avec un fichierREADME
initial.
Clonez ce dépôt :
$ git clone git@github.com:kikinovak/hello.git Cloning into 'hello'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. Receiving objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 $ ls hello $ cd hello/ $ ls README.md
Là aussi, nous allons nous éviter du travail de recopiage et nous servir des fichiers hello.sh
, hello-cow.sh
et hello-figlet.sh
du répertoire atelier-13
. Copiez ces fichiers dans votre répertoire de travail :
$ cp -v ../../atelier-13/hello*.sh . '../../atelier-13/hello-cow.sh' -> './hello-cow.sh' '../../atelier-13/hello-figlet.sh' -> './hello-figlet.sh' '../../atelier-13/hello.sh' -> './hello.sh'
Créez trois branches hello
, hello-cow
et hello-figlet
:
$ git branch hello
$ git branch hello-cow
$ git branch hello-figlet
$ git branch
hello
hello-cow
hello-figlet
* main
Ajoutez le script hello.sh
à la branche hello
:
$ git switch hello Switched to branch 'hello' $ git add hello.sh $ git commit -m "Ajout du script hello.sh" [hello f44d0d0] Ajout du script hello.sh 1 file changed, 9 insertions(+) create mode 100755 hello.sh
Ajoutez le script hello-cow.sh
à la branche hello-cow
:
$ git switch hello-cow Switched to branch 'hello-cow' $ git add hello-cow.sh $ git commit -m "Ajout du script hello-cow.sh" [hello-cow 894cd61] Ajout du script hello-cow.sh 1 file changed, 10 insertions(+) create mode 100755 hello-cow.sh
Puis, ajoutez le script hello-figlet.sh
à la branche hello-figlet
:
$ git switch hello-figlet Switched to branch 'hello-figlet' $ git add hello-figlet.sh $ git commit -m "Ajout du script hello-figlet.sh" [hello-figlet a3852ea] Ajout du script hello-figlet.sh 1 file changed, 10 insertions(+) create mode 100755 hello-figlet.sh
Revenez dans la branche main
et éditez le fichier README.md
. Peu importe le détail de cette opération, du moment que vous le modifiez un peu :
$ git switch main Switched to branch 'main' Your branch is up to date with 'origin/main'. $ vim README.md $ git add README.md $ git commit -m "Peaufinage du fichier README." [main 953a6f1] Peaufinage du fichier README. 1 file changed, 2 insertions(+), 1 deletion(-)
Rien de nouveau sous le soleil. Nous avons créé trois branches avec leurs ajouts respectifs, et nous avons apporté une petite modification à la branche d’intégration main
:
$ git log --oneline --graph --all * 953a6f1 (HEAD -> main) Peaufinage du fichier README. | * a3852ea (hello-figlet) Ajout du script hello-figlet.sh |/ | * 894cd61 (hello-cow) Ajout du script hello-cow.sh |/ | * f44d0d0 (hello) Ajout du script hello.sh |/ * 16f45de (origin/main, origin/HEAD) Initial commit
Jusqu’ici, nous avons utilisé la commande git push
pour publier les modifications de la branche d’intégration locale main
vers son homologue public origin/main
.
Vous vous êtes peut-être demandé ce qui se passerait si l’on cherchait à effectuer git push
depuis une branche de développement locale.
Essayons de voir ce que cela donne :
$ git switch hello
Switched to branch 'hello'
$ git branch
* hello
hello-cow
hello-figlet
main
$ git push
fatal: The current branch hello has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin hello
Apparemment, Git refuse de jouer le jeu. Mais comme souvent, il nous donne une indication précieuse pour la suite. En langage tam-tam, il déplore l’absence d’une branche hello
correspondante dans le dépôt public et nous suggère de créer la branche en question :
$ git push --set-upstream origin hello Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 343 bytes | 343.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: remote: Create a pull request for 'hello' on GitHub by visiting: remote: https://github.com/kikinovak/hello/pull/new/hello remote: To github.com:kikinovak/hello.git * [new branch] hello -> hello Branch 'hello' set up to track remote branch 'hello' from 'origin'.
Si vous avez un poil dans la main et que vous trouvez que l’option longue --set-upstream
ça fait beaucoup de caractères à taper, vous pouvez très bien utiliser l’option courte -u
(git push -u origin hello
).
À présent, ouvrez la page de votre dépôt dans l’interface de GitHub. Si tout s’est bien passé, vous verrez apparaître un bouton Compare & pull request :
Cliquez dessus pour effectuer un pull request. Voici comment se présente la page subséquente :
- Les deux menus déroulants représentent respectivement la branche d’intégration et la branche source.
- La zone de commentaires sur la page vous permet d’ajouter des informations à destination de vos collègues sur le pourquoi du comment de vos modifications.
- Cliquez sur Create pull request.
- Confirmez la fusion des deux branches en cliquant sur Merge pull request.
- Il ne vous reste plus qu’à faire un brin de ménage. Supprimez la branche distante
hello
en cliquant sur Delete branch :
Jetons un œil dans l’historique du dépôt distant. Le résultat du pull request, c’est bien une fusion des deux branches main
et hello
dans le dépôt distant :
Exercice 1
Pour vous faire la main, essayez d’intégrer les branches hello-cow
et hello-figlet
de la même manière, en passant par un pull request sur GitHub :
- Basculez vers la branche
hello-cow
. - Effectuez un
git push
depuis cette branche. - Suivez les indications fournies par Git (
git push --set-upstream origin hello-cow
). - Rendez-vous dans l’interface de GitHub.
- Repérez le bouton qui vous permet d’effectuer un pull request.
- Fusionnez les branches
main
ethello-cow
dans l’interface de GitHub. - Faites un brin de ménage en supprimant la branche distante
hello-cow
. - Procédez de même pour intégrer la branche
hello-figlet
.
Exercice 2
- Créez un répertoire
~/formation-git/atelier-36
. - Connectez-vous à GitLab.
- Supprimez votre dépôt
roadtrip
. - Recréez le dépôt privé
roadtrip
avec un fichierREADME
initial. - Clonez ce dépôt.
- Copiez les fichiers
Cartes.md
,Entretien.md
etRoadtrip.md
depuis le répertoireatelier-19
. - Laissez les fichiers dans le répertoire de travail sans les ajouter à l’index pour l’instant.
- Créez trois branches respectives
cartes
,entretien
etroadtrip
. - Ajoutez les trois fichiers aux trois branches respectives avec un message qui va bien.
- Revenez dans la branche d’intégration.
- Modifiez votre fichier
README
. - Publiez cette dernière modification.
- Basculez vers la branche
cartes
et essayez d’effectuer ungit push
. - GitLab utilise un autre nom pour les pull requests : lequel ?
- Essayez d’intégrer successivement vos trois branches comme vous l’avez fait avec GitHub.
- Notez que l’ergonomie de l’interface de GitLab n’est pas tout à fait pareille.
Exercice 3
Un petit exercice de réflexion :
- Essayez de visualiser l’état respectif de vos dépôts locaux et de vos dépôts distants.
- À quoi ressemble leur historique ?
- Quelle serait la prochaine opération logique ?
Lire la suite : Travailler en équipe
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire