jeudi 1 mai 2014

[DevoxxFr 2014] Session Git ++

Session Git ++

git_logoIl y a deux choses à retenir dans cette session, comment structurer les messages de commit pour mieux exploiter l'histoire de son repository et la puissance du rebase interactif. Pour la plupart du temps on a tendance à utiliser Git comme on le fait avec le bon vieux SVN, sans prendre le temps de lire la documentation (pourtant très bien fournie). Les commandes git add, git commit et git push suffisent pour ajouter une nouvelle ligne dans le CV. Ce qui fait qu'on passe à côté de choses simples pourtant très utiles qui font la magie de Git.
Une fois la commande git commit lancée, le terminal nous laisse la main avec l'éditeur de notre choix (Vim, pico) pour écrire notre commentaire. La convention de commit proposée est inspirée du projet AngularJS. Le commentaire d'un commit est composé de plusieurs champs :

<type>(<scope>): <subject> 
<BLANK LINE> 
<body> 
<BLANK LINE> 
<footer>
  • type : peut être soit un feature, du refactoring, de la documentation, un fix, …
  • scope : l'endroit des commits (module, couche, projet, … )
  • subject : une description des changements effectués dans le commit
  • body : décrit les motivations du commit
  • footer : les références du commit (Jira, User Strories, ...)
Avec le rebase interactif “git rebase -i” on peut effectuer plusieurs actions sur les commits avant de les pusher. Renommer, réordonner, supprimer, fusionner, modifier ou insérer.
A la fin une question a été soulevée plusieurs fois sur les risques de perdre une histoire en modifiant un commit. D'abord les modifs ne concernent que le repo local et non celui qui est partagé, ensuite il faut savoir qu'un commit est immutable, il n'est jamais modifié. . Quand on tente une action de modification sur un commit C Git crée un nouveau commit C' qui est le clone de C + les nouvelles modifications.
If you’ve used Git, you’re probably aware that you can update your latest commit by using commit --amend. But can you really update a commit? In fact, you cannot. Git simply creates a new commit and moves your branch pointer to it. The old value can still be found using git reflog, and can be referred to by its hash value
http://www.jayway.com/2013/03/03/git-is-a-purely-functional-data-structure/