Découvrir Git avec Bitbucket Cloud

Découvrez le branching avec Bitbucket Cloud

Objectif

Ce tutoriel vous apprendra les bases de la création, de l'utilisation, de la revue et du merge de branches à l'aide de Git et de Bitbucket Cloud.

Durée Public Prérequis
35 minutes Vous comprenez déjà le workflow Git de base Vous avez installé Git
Vous possédez un compte Bitbucket

Ce tutoriel est fait pour vous si vous avez déjà compris le workflow Git de base et comment :

  • Cloner : copier le dépôt distant dans Bitbucket Cloud dans votre système local.
  • Ajouter ou stager : prendre les changements apportés et les préparer pour les ajouter à votre historique Git.
  • Faire un commit : ajouter de nouveaux fichiers ou des fichiers modifiés à l'historique Git pour le dépôt.
  • Pull : obtenir les nouveaux changements ajoutés au dépôt par d'autres personnes dans votre dépôt local
  • Push : appliquez les changements depuis votre système local au dépôt distant

Si vous ne connaissez pas les principes de base de Git, pas de panique, lisez juste notre tutoriel Découvrez Git avec Bitbucket Cloud et vous serez opérationnel en un rien de temps.

L'importance du branching

La création de branches est l'un des meilleurs moyens de tirer le meilleur parti de Git pour le contrôle de version. La création de branches dans Git vous permet :

  • de disposer de plusieurs équipes qui travaillent simultanément depuis un même dépôt ;
  • d'inciter les membres de l'équipe partout dans le monde à utiliser Bitbucket Cloud pour collaborer ;
  • Vous disposerez de plusieurs lignes de développement fonctionnant de façon simultanée et indépendante les unes des autres sans avoir à geler le code.

Préparez-vous

Puisque nous voulons que vous ayez l'impression de travailler dans une équipe, dans un dépôt Bitbucket classique, nous vous laisserons forker un dépôt public que nous avons fourni.

Qu'est-ce qu'un fork ?

Le fork est un autre moyen d'enregistrer un clone ou une copie. Le terme fork (en programmation) vient d'un appel du système Unix qui crée une copie d'un processus existant. Par conséquent, contrairement à une branche, un fork est indépendant du dépôt d'origine. Si le dépôt d'origine a été supprimé, le fork est conservé. Si vous forkez un dépôt, vous obtenez ce dépôt et toutes ses branches.

  1. Accédez à bitbucket.org/tutorials/tutorials.git.bitbucket.org.
  2. Cliquez sur + > Forker ce dépôt sur la gauche de l'écran.
  3. Modifiez le nom (Name) de sorte qu'il soit unique à votre équipe, puis cliquez sur Fork repository (Faire un fork du dépôt).
  4. Créez un répertoire facile d'accès pour le dépôt. Par exemple :
     $ mkdir test-repositories $ cd test-repositories/ $ test-repositories
    L'exemple précédent crée le répertoire test-repositories à l'aide de la commande mkdir (créer un répertoire) et accède au répertoire à l'aide de la commande cd (changer de répertoire).
  5. Clonez le dépôt forké dans le répertoire que vous venez de créer. Votre billet devrait ressembler à cela :
     $ git clone https://dstevenstest@bitbucket.org/dstevenstest/mygittutorial.bitbucket.io.git Cloning into 'mygittutorial.bitbucket.io'... remote: Counting objects: 12392, done. remote: Compressing objects: 100% (12030/12030), done. remote: Total 12392 (delta 8044), reused 564 (delta 360) Receiving objects: 100% (12392/12392), 2.72 MiB | 701.00 KiB/s, done. Resolving deltas: 100% (8044/8044), done. $ cd mygittutorial.bitbucket.io/
    Ce qui clone le dépôt avec la commande git clone et crée le répertoire généré par le clone, mygittutorial.git.bitbucket.io.

Créez une branche et modifiez un élément à l'aide du workflow de branching

Vous allez ajouter une citation sur votre site web dans cette branche.

  1. Créez une branche à l'aide de la commande git branch.
     $ git branch test-1
  2. Faites un check-out de la branche que vous venez de créer à l'aide de la commande git checkout.
     $ git checkout test-1 Switched to branch 'test-1'
  3. Répertoriez les branches locales à l'aide de la commande git branch.
     $ git branch master * test-1
  4. Mettez à jour le fichier editme.html en ajoutant une citation. Vous pouvez par exemple utiliser ce qui suit :
     
    Voici une citation que j'aime bien.
    Une citation : de l'art de faire des citations
  5. Ajoutez ce changement.
     git add editme.html
    Remarque : votre changement n'est pas commité dans l'historique Git, il est en attente. Nous l'avons découvert dans Enregistrement des changements.
  6. Commitez le changement avec un message de commit descriptif.
     git commit editme.html -m'added a new quote' [test-1 063b772] added a new quote 1 file changed, 3 insertions(+), 3 deletions(-)
    Remarque : les changements font désormais partie de l'historique Git sous forme de « commit » unique. Nous l'avons appris dans Enregistrement de changements.
  7. Pushez ce changement dans Bitbucket à l'aide de la commande git push.
     git push fatal: La branche test-1 actuelle ne présente aucune branche upstream. Pour pusher la branche courante et définir le dépôt distant comme upstream, utilisez git push --set-upstream origin test-1
    Une erreur s'affiche, car la première fois que vous pushez une nouvelle branche créée en local, vous devez désigner cette branche.
  8. Pushez la branche et modifiez à l'aide de la commande git push branch.
     $ git push origin test-1 Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 363 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: remote: Create pull request for test-1: remote: https://bitbucket.org/dstevenstest/dans.git.bitbucket.org/pull-requests/new?source=test-1&t=1 remote: To https://bitbucket.org/dstevenstest/dans.git.bitbucket.org.git * [new branch] test-1 -> test-1
    Elle transmet au système que le dépôt d'origine est la destination de cette nouvelle branche.
  9. Ouvrez votre dépôt de tutoriels, puis cliquez sur Branches. Vous devriez voir les branches master et test-1. Le texte devrait ressembler à cela :
Découvrez les branches Bitbucket

Créer et fetcher une branche distante et faire un checkout

Lorsque vous travaillez dans une équipe, vous souhaiterez peut-être faire un fetch/pull des branches que les autres membres de l'équipe créent et pushent dans Bitbucket. Cet exemple vous fournira certaines bases pour créer et utiliser les branches créées par d'autres personnes.

  1. BranchesAccédez à votre dépôt de tutoriel dans Bitbucket, puis cliquez sur Branches. Vous devriez voir quelque chose comme ceci : Branches
  2. Cliquez sur Create branch (Créer une branche), nommez la branche « test-2 », puis cliquez sur Create (Créer).
  3. Copiez la commande git fetch dans la boîte de dialogue Faire un checkout de votre branche. Le résultat devrait ressembler à cela :
     $ git fetch && git checkout test-2 From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org * [new branch] test-2 -> origin/test-2 Branch test-2 set up to track remote branch test-2 from origin. Switched to a new branch 'test-2'
  4. Utilisez la commande git branch dans votre terminal. Vous devriez voir une liste de branches ressemblant à ceci :
     $ git branch master test-1 * test-2
    La branche marquée d'un astérisque * est la branche active. Il est essentiel de s'en souvenir lorsque vous travaillez dans un workflow de branches.
  5. Utilisez la commande git-status, vous verrez quelque chose comme :
     $ git status On branch test-2 Your branch is up-to-date with 'origin/test-2'. nothing to commit, working tree clean
    Vous pouvez voir la branche sur laquelle vous vous trouvez et si elle est à jour avec votre branche distante (origin).
  6. Utilisez la commande git checkout pour rétablir le focus sur votre autre branche. Elle devrait ressembler à ce qui suit :
     $ git checkout test-1 Switched to branch 'test-1' Your branch is ahead of 'origin/test-1' by 3 commits. (utilisez "git push" pour publier vos commits locaux)
    L'un des points essentiels à garder à l'esprit lorsque vous utilisez des branches est que vous souhaitez avoir l'assurance de modifier la bonne branche.

Pusher les changements et créer une pull request

Il est à présent temps de faire réviser votre premier changement et de merger la branche.

  1. Cliquez sur +> Create a pull request (Créer une pull request). Vous pouvez voir votre branche test-1 en tant que branche source et la branche principale (master) dans la branche de destination.

    Puisque nous avons créé ce dépôt en forkant un dépôt existant, la destination est définie sur la branche principale du dépôt forké.

    Pour corriger cela, vous devrez changer la branche de destination du dépôt (la branche dans laquelle vous allez merger vos changements) de tutorials/tutorials.git.bitbucket.org vers votre dépôt.

    Pull request

    Vous pouvez également ajouter des réviseurs dans votre équipe pour faire une pull request. En savoir plus sur les pull requests

  2. Cliquez sur Créer une pull request.
  3. Insérez un commentaire dans la pull request en sélectionnant une ligne dans la comparaison (la zone présentant le changement que vous avez apporté au fichier editme.html).
  4. Cliquez sur Approve (Approuver) en haut à gauche de la page. Dans une vraie pull request, des réviseurs feraient bien évidemment des commentaires.
  5. Cliquez sur Merge (Merger).
  6. (Facultatif) Mettez à jour le message de commit avec plus de détails.
  7. Sélectionnez la stratégie de merge Merger le commit parmi les deux options :
    • Merger des commits : conserve tous les commits depuis votre branche source, puis les intègre à la branche de destination. Cette option équivaut à saisir git merge --no-ff dans la ligne de commande.
    • Squash : combine vos commits lorsque vous mergez la source dans la branche de destination. Cette option équivaut à saisir git merge --squash dans la ligne de commande.
    Apprenez-ne plus sur ces deux types de stratégies de merge.
  8. Cliquez sur Commits et vous verrez comment la branche que vous venez de merger s'intègre au schéma de changements plus large.

Supprimer une branche et faire un pull de master dans la branche de travail locale

Vous avez à présent parcouru le workflow de branching de base et vos changements sont dans la branche master. Il vous reste une dernière chose à apprendre : comment supprimer la branche que vous venez de merger, faire un pull de la branche master mise à jour et la merger dans votre branche test-2.

Pourquoi supprimer la branche ?

Rappelez-vous, la création de branches est différents dans Git et dans SVN ou d'autres systèmes de contrôle de version similaires, car elle utilise des branches à long terme (comme une branche master et develop) et des branches develop à court terme (comme les exemples que nous utilisons dans ce tutoriel). Puisque c'est le cas, il est judicieux de supprimer des branches locales pour que votre environnement local reste propre.

Pourquoi puller la branche maser et la merger dans test-2 ?

Nous l'utilisons pour illustrer une situation dans laquelle vous travaillez sur un dépôt avec un autre membre de l'équipe. Il est judicieux de faire ponctuellement un pull des changements dans votre branche de travail pour éviter les conflits de merge dans les pull requests.

  1. Ouvrez votre terminal et exécutez la commande git status. Le résultat devrait ressembler à ceci :
     $ git status On branch test-1 nothing to commit, working tree clean
    Vous pouvez voir que vous vous trouvez sur la branche que vous venez d'utiliser pour effectuer votre changement et que vous n'avez aucun changement. Nous sommes prêts à nous en débarrasser maintenant que nous en avons terminé avec cette tâche.
  2. Basculez vers la branche master en exécutant la commande git checkout master. Le résultat devrait ressembler à ceci :
     git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'.
    Vous voyez que le message indique que vous êtes à jour ? C'est uniquement votre branche locale. Nous savons cela, parce que nous venons de merger un changement dans la branche master et que nous n'avons pas fait un pull de ce changement depuis le dépôt distant vers notre système local. Voici ce que nous allons faire ensuite.
  3. Exécutez la commande git pull. Le résultat devrait ressembler à ceci :
     $ git pull remote: Counting objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (1/1), done. From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org 2d4c0ab..dd424cb master -> origin/master Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
    Lorsque vous faites un pull des changements depuis le dépôt distant, Git exécute un fast-forward merge pour intégrer vos changements. Il répertorie également le nombre de fichiers et de lignes dans ce fichier qui ont changé.
  4. Exécutez la commande git branch -d {nom_branche} pour supprimer la branche test-1. Le résultat ressemblera à ceci :
     $ git branch -d test-1 Deleted branch test-1 (was 063b772)
    Vous pouvez voir que la branche a été supprimée et quelle était la dernière empreinte de commit pour celle-ci. C'est une manière sûre de supprimer une branche, parce que Git ne vous autorisera pas à supprimer la branche si elle contient des changements non commités. Vous devriez toutefois être conscient que cela n'empêchera pas la suppression des changements qui sont commités dans l'historique Git, mais pas mergés dans une autre branche.
  5. Basculez vers la branche test-2 avec la commande git checkout.
     $ git checkout test-2 Switched to branch 'test-2' Your branch is up-to-date with 'origin/test-2'.
  6. Faites un merge de la branche master dans votre branche de travail avec la commande git merge master test-2. Le résultat ressemblera à ceci :
     $ git merge master test-2 Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
    Il est important de ne pas oublier les éléments suivants :
    • La branche active est importante. Si vous voulez faire un merge de la branche master dans la branche test-2, vous souhaiterez extraire cette dernière (active). De même, si vous voulez faire un merge de la branche test-2 dans la branche master, vous devrez extraire cette dernière.
    • Pour voir quelle branche est active à tout moment, utilisez git branch, et la branche active sera indiquée par un astérisque. Si vous utilisez git status, la commande vous indiquera dans quelle branche vous vous trouvez et s'il existe des changements locaux en attente.

Nous espérons que vous en avez appris un peu plus sur le branching et les commandes impliquées. Passons en revue ce que nous venons de couvrir :

Examiner le workflow de création de branches

Le workflow de branche de fonctionnalité Git est un moyen efficace de travailler avec votre équipe dans Bitbucket. Dans ce workflow, le développement des fonctionnalités a lieu sur des branches distinctes de la branche master principale. Par conséquent, plusieurs développeurs peuvent travailler sur leurs propres fonctionnalités sans toucher au code principal.

Commencez par la branche master

Ce workflow vous permet de collaborer sur votre code avec au moins une autre personne. Tant que votre Bitbucket et vos dépôts locaux sont à jour, vous pouvez vous lancer.

Créer une nouvelle branche

Utilisez une branche distincte pour les fonctionnalités ou tickets sur lesquels vous travaillez. Après la création d'une branche, extrayez-la en local pour que tous vos changements soient réalisés sur cette branche.

Mettez à jour, ajoutez, commitez et pushez des changements

Travaillez sur une fonctionnalité et effectuez des commits quand vous le souhaitez avec Git. Lorsque vous êtes prêt, pushez vos commits en mettant à jour la branche de fonctionnalité sur Bitbucket.

Faites réviser votre code

Pour obtenir un feedback sur votre code, créez une pull request dans Bitbucket. Ensuite, vous pouvez ajouter des réviseurs et vous assurer que tout est OK avant le merge.

Résolvez du feedback

À présent, les membres de votre équipe commentent et approuvent. Résolvez les commentaires en local, commitez, puis faites un push des changements vers Bitbucket. Vos mises à jour apparaissent dans la pull request.

Faire un merge de votre branche

Avant de faire un merge, vous devrez peut-être résoudre des conflits de merge si d'autres ont apporté des changements au dépôt. Une fois votre pull request approuvée et exempte de conflit, vous pouvez ajouter votre code à la branche principale. Faites un merge à partir de la pull request dans Bitbucket.

Ce tutoriel est limité dans sa capacité à montrer combien les branches contribuent à l'efficacité des équipes. Il existe plusieurs approches du branching, et nous discuterons de certaines de ces approches dans : Comparaison de workflows.