Skip to content
This repository was archived by the owner on Feb 19, 2019. It is now read-only.
Gabriel edited this page Feb 1, 2018 · 3 revisions

Welcome to the LOG3900 wiki!


Conventions

Codage

Langue : Anglais. Le français est utilisé uniquement pour les Wiki afin de faciliter la compréhension.

Suivre les conventions pour chaque langage, et les règles spécifiques à chaque projet s'il y a lieu

Branches

Le nom d'une branche doit suivre le pattern suivant : [(serveur|leger|lourd|web)-(feature-name)].

Exemple : serveur-sockets.

Commits

Le nom des commits doit suivre le pattern suivant : [refs #xxx (serveur|leger|lourd|web) commit_message].

Exemple : refs #14776 [serveur] Handle Socket.io connections


Git

Développer une nouvelle fonctionnalité

  1. git checkout master
  2. git pull origin master
  3. git checkout -b [(serveur|leger|lourd|web)-(feature-name)], ex : git checkout -b serveur-sockets
  4. Faire des changements et des commits granulaires jusqu'à ce que la fonctionnalité soit terminée.
  5. git fetch
  6. git rebase -i origin/master (voir note 1)
  7. git push origin [(serveur|leger|lourd|web)-(feature-name)], ex : git push origin serveur-sockets (voir note 2)

Rebase interactif

La commande git rebase -i origin/master est en réalité un rebase interactif. Cela va ouvrir l'éditeur par défaut de Git avec la liste des commits ajoutés dans votre branche par rapport à ce qui se trouve dans origin/master.

D'ailleurs, pour avoir Notepad++ en éditeur par défaut, git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin".

Le rebase interactif permet de réécrire l'historique des commits. Les fonctionnalités que nous utiliserons sont les suivantes :

  • p = pick
  • r = reword
  • d = drop
  • f = fixup

Les autres fonctionnalités qui existent :

  • e = edit
  • s = squash
  • x = exec

pick

C'est l'action par défaut, cela va garder le commit intact.

reword

Cela permet de renommer le message du commit. Très utile si on a oublié de mettre le "refs #xxx" par exemple 😜

drop

Ce commit sera complètement retiré et n'apparaîtra plus dans l'historique. Les changements seront perdus.

Remarque : Il est possible de drop un commit en supprimant sa ligne dans le rebase. Il est également possible de réordonner les commit en réordonnant les lignes dans le rebase.

fixup

Cela va ajouter les changements du commit directement dans le commit qui le précède directement, donc on perdre le message de commit mais pas les changements du code!

Exemple :

pick 1da36ae refs #14790 Assets 1
f    98dcc3b refs #14790 Assets 2 

Va produire un seul commit (1da36ae refs #14790 Assets 1), mais contenant les changements de Assets 1 et de Assets 2. Si git est incapable de faire un merge automatique entre les 2 commits, vous devrez faire le merge manuellement.

Merge lors d'un rebase

Git s'arrêtera à chaque merge qu'il est incapable de faire par lui même. Vous devez résoudre les conflits au niveau du code, mais ne rien commit. Assurez-vous que tous les conflits ont été réglés, puis exécutez git rebase --continue.

Notes

1. Lorsque l'on fait des commits granulaires, il peut être préférable de faire les fixup avant de rebase par rapport au master. En effet, cela peut nous sauver d'avoir à effectuer des merge inutiles, car on peut potentiellement avoir 1 merge par commit. Pour ce faire, il faut faire ce qui suit :

  1. Compter le nombre de commits que nous avons ajouté. Assumons que ce nombre est X.
  2. git rebase -i HEAD~X, ex : git rebase -i HEAD~4

Une fois toutes nos opérations faites sur nos commits, on peut simplement exécuter git rebase origin/master, puis la commande #7 décrite ci-haut.

2. Si nous avons modifié l'historique des commits par rapport à ce qui se trouve sur la branche remote, il nous faudra utiliser l'option force afin de overwrite le remote avec notre version locale.

Exemple : git push origin serveur-sockets --force

Clone this wiki locally