Projet

Général

Profil

GitTrucsEtAstuces » Historique » Version 2

« Précédent - Version 2/6 (diff) - Suivant » - Version actuelle
Daniel Dehennin, 06/12/2011 20:49
C: typo: tournure de phrase alambiquée


Tu balises quand tu commit ?

Objectif

L’idéal est de faire des commits :
  • Souvent
  • Par type de modification
On peut ainsi mettre de côter des commits qui ne font que corriger des typos dans du code qui n’est pas le nôtre, l’idée est :
  • Corriger tout ce que l’on voit, si personne d’autre ne l’a déjà fait, alors ça sera fait
  • Ne pas se donner du travail supplémentaire à gérer des conflits pour des corrections typographiques et/ou mineures.

N’ayons peur de rien, balisons !

Les commits de notre code

Différents types de commit :
  • Le commit qui introduisent de nouvelles choses (N: New) : quand on est super fort, on ne fait que ce type de commits, mais quand on est super fort, on a pas besoin de git ;-) ;
  • Le commit qui corrige un problème fonctionnel dans le nouveau code introduit par le type ci-dessus (F: Fix) : et oui, ça arrive d’oublier des ", ) ou ] ;
  • Le commit qui corrige un problème cosmétique (C: Cosmetic) de notre travail, décomposé en 2 sous catégories :
    • La correction des messages visibles par l’utilisateur (C: print:) ;
    • La correction des commentaires (C: #:).

Voici un exemple type de messages de log court pour une nouvelle fonctionnalitée :

  moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git log --oneline master..HEAD
  ed002ff N: Ajout de la bibilothèque de gestion du voyant qui clignote
  7610ac6 F: Oublie d’une ) lors de l’appel à ->new()
  c44649d C: #: Mauvaise tournure de phrase: le voyant qui clignote est obligatoire
  2ed9b43 C: print: Typo: 3e personne du pluriel == ent

Le balisage de chaque commit permet de facilement s’y retrouver lors de la réorganisation des commits pour publication :
  • Les commit № 7610ac6, c44649d et 2ed9b43 doivent être fusionnées avec le commit № ed002ff et leur message de commit suprrimé

Les commits du code des autres

Il est possible, et vivement recommandé par moi-même, d’introduire une autre série de balises pour tout ce qui est correction en dehors de notre travail en cours.

C’est à dire, la correction des problèmes qui étaient déjà présents avant de faire la nouvelle branche.

  • Le commit qui corrige un problème fonctionnel (Fo: Fix other) ;
  • Le commit qui corrige un problème cosmétique (Co: Cosmetic other), décomposé en 2 sous catégories :
    • La correction des messages visibles par l’utilisateur (Co: print:) ;
    • La correction des commentaires (Co: #:).

Il est ainsi aisé de savoir quels commits il faut fusionner et quels commits restent autonommes :

  moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git log --oneline master..HEAD
  ed002ff N: Ajout de la bibilothèque de gestion du voyant qui clignote
  7610ac6 F: Oublie d’une ) lors de l’appel à ->new()
  74fe39b Co: #: Erreur de description de la variable "remote" de la méthode Bidule::Truc::Machiner()
  c44649d C: #: Mauvaise tournure de phrase: le voyant qui clignote est obligatoire
  9972b58 Fo: La méthode Bidule::Truc::Biduler() n’étant jamais utilisée, personne n’a vu qu’elle ne fonctionnait pas
  9a6c6c9 Co: print: Typo: Correction du message de l’exception Bidule::Exception::NoBattery
  2ed9b43 C: print: Typo: 3e personne du pluriel == ent

Comment s’en servir ?

Lors d’un git rebase -i HEAD~7, l’éditeur est lancé avec le contenu suivant :

  moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git rebase -i HEAD~7
  pick ed002ff N: Ajout de la bibilothèque de gestion du voyant qui clignote
  pick 7610ac6 F: Oublie d’une ) lors de l’appel à ->new()
  pick 74fe39b Co: #: Erreur de description de la variable "remote" de la méthode Bidule::Truc::Machiner()
  pick c44649d C: #: Mauvaise tournure de phrase: le voyant qui clignote est obligatoire
  pick 9972b58 Fo: La méthode Bidule::Truc::Biduler() n’étant jamais utilisée, personne n’a vu qu’elle ne fonctionnait pas
  pick 9a6c6c9 Co: print: Typo: Correction du message de l’exception Bidule::Exception::NoBattery
  pick 2ed9b43 C: print: Typo: 3e personne du pluriel == ent
  # Rebase ed002ff..2ed9b43 onto ed002ff
  #
  # Commands:
  #  p, pick = use commit
  #  r, reword = use commit, but edit the commit message
  #  e, edit = use commit, but stop for amending
  #  s, squash = use commit, but meld into previous commit
  #  f, fixup = like "squash", but discard this commit's log message
  #  x, exec = run command (the rest of the line) using shell
  #
  # If you remove a line here THAT COMMIT WILL BE LOST.
  # However, if you remove everything, the rebase will be aborted.
  #

Il est ainsi possible de fusionner les 4 commits qui nous conserne en un seul en déplaçant les lignes et en leur appliquant la commande de "fixup" :

  moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git rebase -i HEAD~7
  pick ed002ff N: Ajout de la bibilothèque de gestion du voyant qui clignote
  f 7610ac6 F: Oublie d’une ) lors de l’appel à ->new()
  f c44649d C: #: Mauvaise tournure de phrase: le voyant qui clignote est obligatoire
  f 2ed9b43 C: print: Typo: 3e personne du pluriel == ent
  pick 74fe39b Co: #: Erreur de description de la variable "remote" de la méthode Bidule::Truc::Machiner()
  pick 9972b58 Fo: La méthode Bidule::Truc::Biduler() n’étant jamais utilisée, personne n’a vu qu’elle ne fonctionnait pas
  pick 9a6c6c9 Co: print: Typo: Correction du message de l’exception Bidule::Exception::NoBattery
  # Rebase ed002ff..2ed9b43 onto ed002ff
  #
  # Commands:
  #  p, pick = use commit
  #  r, reword = use commit, but edit the commit message
  #  e, edit = use commit, but stop for amending
  #  s, squash = use commit, but meld into previous commit
  #  f, fixup = like "squash", but discard this commit's log message
  #  x, exec = run command (the rest of the line) using shell
  #
  # If you remove a line here THAT COMMIT WILL BE LOST.
  # However, if you remove everything, the rebase will be aborted.
  #

Une fois la mise au propre de notre historique faite, nous souhaitons publier ces modifications.

Nous allons donc rebaser notre travail sur la branche origin/master :

  1. On commence par télécharger les éventuels modifications :
      moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git fetch origin
      remote: Counting objects: 24, done.
      remote: Compressing objects: 100% (15/15), done.
      remote: Total 15 (delta 12), reused 0 (delta 0)
      Unpacking objects: 100% (15/15), done.
      From git://far-far.away.example.net/bidule.git
         7ced305..9171f31  master     -> origin/master
    
  2. On rebase en modifiant les messages de commit afin de supprimer le balisage, il n’y a rien à fusionner :
      moi@work:~/src/bidule(moi/voyant-qui-clignote)$ git rebase origin/master
      r ed002ff N: Ajout de la bibilothèque de gestion du voyant qui clignote
      r 74fe39b Co: #: Erreur de description de la variable "remote" de la méthode Bidule::Truc::Machiner()
      r 9972b58 Fo: La méthode Bidule::Truc::Biduler() n’étant jamais utilisée, personne n’a vu qu’elle ne fonctionnait pas
      r 9a6c6c9 Co: print: Typo: Correction du message de l’exception Bidule::Exception::NoBattery
      # Rebase ed002ff..9a6c6c9 onto 9171f31
      #
      # Commands:
      #  p, pick = use commit
      #  r, reword = use commit, but edit the commit message
      #  e, edit = use commit, but stop for amending
      #  s, squash = use commit, but meld into previous commit
      #  f, fixup = like "squash", but discard this commit's log message
      #  x, exec = run command (the rest of the line) using shell
      #
      # If you remove a line here THAT COMMIT WILL BE LOST.
      # However, if you remove everything, the rebase will be aborted.
      #
    

Si un conflit est détecté sur le commit 9a6c6c9 Co: print: Typo: Correction du message de l’exception Bidule::Exception::NoBattery,
il suffira d’annuler le rebase avec git rebase --abort et de le recommencer, cette fois ci en supprimant la ligne correspondante.