GitVoici 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 fichier README initial.

Dépôt Git

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'.

AstuceSi 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 :

GitHub Pull Request

Cliquez dessus pour effectuer un pull request. Voici comment se présente la page subséquente :

GitHub Pull Request

  • 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.

GitHub 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 :

GitHub Pull Request

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 :

GitHub Pull Request

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 et hello-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 fichier README initial.
  • Clonez ce dépôt.
  • Copiez les fichiers Cartes.md, Entretien.md et Roadtrip.md depuis le répertoire atelier-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 et roadtrip.
  • 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 un git 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.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *