Gérer la concurrence et les conflits

Attention

Si deux personnes sont autorisées à pousser sur le même distant alors il y a un risque de conflit.

Un conflit survient quand deux dépôt locaux ont produit des modifications localement concernant les mêmes fichiers et cherchent ensuite à les pousser sur le même dépôt distant.

Remarque

Si une seule personne utilise deux dépôt locaux connectés au même dépôt distant (par exemple pour travailler sur deux machines différentes), alors il y a aussi risque de conflit.

DéfinitionConflit

On parle de conflit lorsque deux personnes on modifié les mêmes lignes d'un fichier en parallèle et que Git ne peut donc pas savoir quelle version conserver lors d'une fusion.

  • Git ne comprend pas le texte qu'il versionne, il ne sait donc pas quoi garder en cas de conflit.

  • Résoudre un conflit c'est dire à Git quelle est la bonne version à garder.

  • Il peut s'agit d'une des deux versions uniquement, ou d'un mélange des deux.

Exemple

  • Alice tire le projet en (a), il y a 3 commits.

  • Alice ajoute un commit C4 sur son dépôt local.

  • Pendant ce temps, Bob ajoute son commit C4' sur le projet et le pousse sur le dépôt distant.

  • Si Alice veut pousser sa modification C4 alors elle doit d'abord tirer les modifications de Bob et en cas de conflit choisir quelles modifications parmi celles de Bob sont pertinentes.

ConseilBonnes pratiques

La résolution des conflits n'est pas toujours une tâche aisée, surtout pour des débutants, il est conseillé de :

  • éviter les conflits en se coordonnant (savoir qui fait quoi et quand sur le dépôt distant),

  • lorsqu'un conflit survient, bien prendre le temps de le résoudre en consultant attentivement les fichiers concernés.

ConseilConseil de brute

Si :

  1. un conflit survient,

  2. que vous avez des modifications auxquelles vous tenez en local,

  3. que vous n'êtes pas sûr de ce que vous allez faire parce que vous ne connaissez pas bien Git,

alors :

  • je vous conseille de copier le contenu de votre dossier "à l'ancienne" (dans un dossier temporaire), avant de résoudre votre conflit.

Complément

La bonne gestion des conflits suppose (notamment) l'usage des fonctions Git de type branch et merge et l'usage des fonctions Gitlab de type merge request.