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 maîtrisez déjà le workflow Git de base et les opérations suivantes :

  • 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.
  • Commiter : ajouter de nouveaux fichiers ou des fichiers modifiés à l'historique Git pour le dépôt.
  • Faire un pull : obtenir les nouveaux changements ajoutés au dépôt par d'autres personnes dans votre dépôt local.
  • Faire un push : appliquer les changements de 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.

Les branches sont essentielles, pourquoi ?

Les branches constituent l'un des meilleurs moyens d'exploiter pleinement Git pour le contrôle de version. Dans Git, les branches vous permettent :

  • 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 ;
  • d'exécuter plusieurs lignes de développement simultanément et indépendamment les unes des autres sans devoir 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 à tutorials/tutorials.git.bitbucket.org
  2. Cliquez sur + > Fork this repository (Forker ce dépôt) à gauche de l'écran.
  3. Modifiez le nom afin qu'il soit unique pour votre équipe, puis cliquez sur Fork repository (Forker le dépôt). 
  4. Créez un répertoire pour le dépôt qui sera facile à consulter. Vous pourriez choisir quelque chose comme :
    $ 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 le répertoire) et bascule sur ce 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. Vous devriez obtenir un résultat similaire à celui-ci :
    $ 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 répertoire à l'aide de 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. Consultez 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 dont vous disposez en local à 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 utiliser quelque chose comme : 
    <div class="quote">
      <blockquote>Voici une citation que j'apprécie.</blockquote>
      <cite>Citation : l'art de la citation</cite>
    </div>
  5. Ajoutez ce changement.
    git add editme.html
    Remarque : votre changement n'est pas encore commité dans l'historique Git, il est encore « en attente ». Nous en avons appris plus à ce sujet dans Enregistrer des changements.
  6. Commitez le changement avec un message de commit descriptif.
    git commit editme.html -m'ajouté une citation'
    [test-1 063b772] ajouté une citation
    1 file changed, 3 insertions(+), 3 deletions(-)
    Remarque : le changement fait désormais partie de l'historique Git en tant que « commit » unique Nous en avons appris plus à ce sujet dans Enregistrer des changements.
  7. Pushez ce changement dans Bitbucket à l'aide de la commande git push.
    git push
    fatal: The current branch test-1 has no upstream branch.
    To push the current branch and set the remote as upstream, use
      git push --set-upstream origin test-1
    Vous verrez une erreur car la première fois que vous pushez une nouvelle branche que vous avez créée localement, vous devez la désigner.
  8. Pushez la branche et le changement à 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
    Cela indique 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 et cliquez sur Branches. Vous devriez voir la branche principale et la branche test-1. Le résultat devrait ressembler à ce qui suit :
Découvrez les branches Bitbucket

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

Lorsque vous travaillez en équipe, vous devrez probablement faire des pulls de branches que d'autres membres de l'équipe créent et pushent (ou fetchent dans Bitbucket). Dans cet exemple, vous découvrirez certains des fondamentaux liés à la création de branches et à l'utilisation de branches créées par d'autres.

  1. Accédez à votre dépôt de tutoriels dans Bitbucket et cliquez sur Branches. Vous devriez voir quelque chose comme : 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 de checkout de votre branche. Le résultat devrait ressembler à ce qui suit :
    $ 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 branche git branch dans votre terminal. Vous devriez voir une liste de branches similaire à celle-ci :
    $ git branch
      master
      test-1
    * test-2
    La branche avec l'astérisque * est la branche active. Il est essentiel de s'en souvenir lorsque vous travaillez dans un workflow de branching. 
  5. Utilisez la commande git status, et 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 sur quelle branche vous êtes et que la branche est actuellement à jour par rapport à votre branche distante (d'origine). 
  6. Utilisez la commande git checkout pour vous concentrer à nouveau sur votre autre branche. La commande ressemblera à ceci :
    $ git checkout test-1
    Switched to branch 'test-1'
    Your branch is ahead of 'origin/test-1' by 3 commits.
    (use "git push" to publish your local commits)
    L'une des choses les plus importantes à retenir lorsque vous travaillez dans des branches ? Vous voulez être sûr que la branche à laquelle vous apportez des changements est la bonne. 

Pusher les changements et créer une pull request

Le moment est venu de revoir 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  comme la branche source, et la branche principale dans la branche de destination. 

    Comme 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 que nous avons forké.

    Pour corriger cela, vous devrez modifier la branche de destination du dépôt (la branche dans laquelle vous mergerez vos changements) de tutorials/tutorials.git.bitbucket.org en celle de votre dépôt.

    Pull Request

    Vous ajouteriez également des réviseurs dans votre équipe à la pull request. En savoir plus sur les pull requests

  2. Cliquez sur Create pull request (Créer une pull request).
  3. Faites un commentaire dans la pull request en sélectionnant une ligne du diff (la zone affichant le changement que vous avez apporté au fichier editme.html).
  4. Cliquez sur Approve (Approuver) en haut à gauche de la page. Bien sûr, dans une vraie pull request, vous auriez des réviseurs qui feraient 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 Merge commit (Commit de merge) parmi les deux options :
    • Merge commit (Commit de merge) : 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.
    En savoir 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 système 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 principale. Il vous reste une dernière chose à apprendre : comment supprimer la branche que vous venez de merger, faire un pull de la branche principale mise à jour et la merger dans votre branche test-2.

Pourquoi supprimer la branche ?

Rappelez-vous, le workflow de branching dans Git diffère de celui dans SVN ou d'autres systèmes de contrôle de version similaires, car il utilise des branches à long terme (comme une branche principale et de développement) et des branches de développement à 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 faire un pull de la branche principale et la merger dans test-2 ?

Cet exemple illustre une situation dans laquelle vous travaillez dans 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 êtes sur la branche que vous venez d'utiliser pour faire votre changement et qu'il n'y a aucun changement. Nous sommes prêts à nous débarrasser de cette branche maintenant que nous avons terminé ce travail.
  2. Basculez vers la branche principale en exécutant la commande git checkout master. Le résultat devrait ressembler à ce qui suit :
    git checkout master
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    Vous remarquez que le message indique que vous êtes à jour. Il s'agit uniquement de votre branche locale. Nous le savons, car nous venons de merger un changement dans la branche principale et nous n'avons pas fait passer ce changement du dépôt distant à notre système local. C'est ce que nous allons faire maintenant.
  3. Exécutez la commande git pull. Le résultat devrait ressembler à ce qui suit :
    $ 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 du dépôt distant, Git exécute un fast-forward merge pour intégrer les changements que vous avez apportés. Il indique également combien de fichiers et de lignes ont été modifiés dans ce fichier.
  4. Exécutez la commande git branch -d {branch_name} pour supprimer la branche test-1. Le résultat devrait ressembler à ce qui suit :
    $ 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 cette branche. C'est le moyen le plus sûr de supprimer une branche, car Git ne vous permettra pas de supprimer la branche si elle contient des changements non commités. Vous devez cependant avoir conscience que cela n'empêchera pas de supprimer les changements qui sont commités dans l'historique Git, mais qui ne sont pas mergés dans une autre branche.
  5. Basculez vers la branche test-2 à l'aide de la commande git checkout.
    $ git checkout test-2
    Switched to branch 'test-2'
    Your branch is up-to-date with 'origin/test-2'.
  6. Mergez la branche principale dans votre branche de travail à l'aide de la commande git merge master test-2. Le résultat devrait ressembler à ce qui suit :
    $ git merge master test-2
    Updating 2d4c0ab..dd424cb
    Fast-forward
    editme.html | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)
    N'oubliez pas :
    • la branche active est importante. Si vous souhaitez merger la branche principale dans la branche test-2, vous devez faire un checkout de la branche test-2 (active). Il en va de même si vous souhaitez merger la branche test-2 dans la branche principale, vous devez faire un check-out de cette branche principale.
    • Pour voir quelle branche est active à tout moment, utilisez la commande git branch. La branche active sera indiquée par un astérisque. Sinon, utilisez la commande git status qui vous indiquera sur quelle branche vous vous trouvez et si des changements locaux sont en attente.

Nous espérons que vous en avez appris un peu plus sur les branches 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 principale. Par conséquent, plusieurs développeurs peuvent travailler sur leurs propres fonctionnalités sans toucher au code principal.

Commencez par la branche principale

Ce workflow vous aide à collaborer sur votre code avec au moins une autre personne. Tant que Bitbucket et vos dépôts locaux sont à jour, vous êtes prêt à vous lancer.

Créez une branche

Utilisez une branche distincte pour chaque fonctionnalité ou ticket sur lesquels vous travaillez. Après avoir créé une branche, consultez-la localement afin que les changements que vous apportez soient effectués sur cette branche.

Mettez à jour, ajoutez, commitez et pushez des changements

Travaillez sur la fonctionnalité et effectuez des commits comme vous le feriez d'habitude dans Git. Lorsque vous êtes prêt, faites un push de vos commits, en mettant à jour la branche de la fonctionnalité sur Bitbucket.

Faites réviser votre code

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

Résolvez le feedback

À présent, les membres de votre équipe commentent et approuvent le code. Résolvez leurs commentaires localement, commitez et faites des push des changements dans Bitbucket. Vos mises à jour apparaissent dans la pull request.

Mergez votre branche

Avant le merge, vous devrez peut-être résoudre des conflits de merge si d'autres personnes ont apporté des changements au dépôt. Lorsque votre pull request est approuvée et ne contient plus de conflit, vous pouvez ajouter votre code à la branche principale. Ensuite, effectuez le merge depuis la pull request dans Bitbucket. 

Ce tutoriel ne montre pas en détail dans quelle mesure les branches contribuent à l'efficacité des équipes. Plusieurs approches sont proposées pour les branches, et nous en abordons certaines dans : Comparaison de workflows.