Découvrir Git avec Bitbucket Cloud

Découvrez le branching avec Bitbucket Cloud

Objective

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 Audience Prerequisites
35 minutes Vous comprenez déjà le workflow Git de base You have installed Git
    You have a Bitbucket account

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 ;
  • Have multiple lines of development running at the same time independent of each other without needing code freezes.

Get set up

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. Go to tutorials/tutorials.git.bitbucket.org
  2. Cliquez sur + > Forker ce dépôt sur la gauche de l'écran.
  3. Modifiez le nom, de sorte qu'il soit unique à votre équipe, puis cliquez sur 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 créé 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. Check out the branch you just created using the git checkout command.
    $ 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 : 
    <div class="citation">
      <blockquote>Voici une citation que j'aime bien.</blockquote>
      <cite>Une citation : de l'art de faire des citations</cite>
    </div>
  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 :
Learn Bitbucket Branches

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. Accédez à votre dépôt de tutoriel dans Bitbucket, puis cliquez sur Branches. Vous devriez voir quelque chose comme ceci : Branches
  2. Cliquez sur Créer une branche, nommez la branche « test-2 », puis cliquez sur 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 se s'en souvenir lorsque vous travaillez dans un workflow de création 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 (d'origine) 
  6. Use the git checkout command to change the focus back to your other branch. The command will look something like this:
    $ 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 être sûr que la branche que vous modifiez est la branche correcte. 

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 +> Créer une pull request. Vous pouvez voir votre branche test-1 en tant que branche source et la branche master dans la branche de destination. 

    Because we created this repository by forking an existing repository the destination is set to the master branch of the repository we forked.

    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. Click Approve in the top left of the page. Of course in a real pull request you'd have reviewers making comments
  5. Cliquez sur Merge
  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
    You can see you're on the branch you just used to make your change and that you don't have any changes. We're ready to get rid of that branch now that we've finished that work.
  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

This workflow helps you collaborate on your code with at least one other person. As long as your Bitbucket and local repos are up-to-date, you're ready to get started.

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 bon 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 master. 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.