Comment éviter l'enfer de la résolution des conflits dans un projet ?
L'outil open source Baboon propose une solution

Le , par Sandro Munda, Membre actif
Baboon: Comment éviter l'enfer de la résolution des conflits dans un projet ?

Développer à plusieurs sur un projet est une pratique très courante. Le travail doit alors être délégué de manière réfléchie afin d'éviter que plusieurs programmeurs se marchent sur les pieds. Cela demande une grande rigueur de la part de chacun des membres du projet.

Si l'un des développeurs dérape, c'est toute l'équipe qui en souffre. Le problème est souvent détecté longtemps après, au moment où le travail de chacun doit être rassemblé («merge»). Cela peut vite tourner au cauchemar de résolution des conflits («merge hell»). Imaginez-vous maintenant l'enfer que cela peut amener dans des projets avec un grand nombre de contributeurs (Linux, Bootstrap, NodeJs, ...).


C'est ici qu'intervient Baboon, un petit outil codé en Python permettant de détecter en temps réel les conflits dans un projet. A chaque sauvegarde d'un fichier, Baboon vérifie chez tous les contributeurs s'il y a un problème. Si c'est le cas, toute l'équipe est avertie et le coupable peut-être puni (gentiment, par pitié). Le conflit ne concerne alors qu'une toute petite partie d'un fichier et peut être résolu très facilement.

Dites simplement adieu aux maux de tête pendant la fusion du travail de chacun !

Plus d'informations sont disponibles sur le site web de Baboon.
Le code source est accessible sous license libre (MIT) sur Github.

Et vous ?

Pensez-vous qu'un tel outil pourrait vous faire gagner un temps précieux lorsque vous développez ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Ceylo Ceylo - Membre éprouvé http://www.developpez.com
le 26/10/2012 à 21:06
Étant encore étudiant je n'ai pas eu l'occasion de travailler sur les projets important en équipe…

Mais le cœur du problème n'est-il pas plutôt le fait de travailler isolé des autres membres ? À mon sens le travail devrait toujours être réalisé en collaboration et avec une bonne communication au sein du groupe de travail.
Avatar de Sandro Munda Sandro Munda - Membre actif http://www.developpez.com
le 27/10/2012 à 0:13
Bien entendu, tu as tout à fait raison. Je remarque que sur le terrain, il n'est pas toujours évident d'être constamment dans un environnement où la communication et la collaboration soient parfaites. Un conflit est vraiment vite arrivé sans s'en rendre forcément compte rapidement... sa résolution peut être vraiment pénible et faire perdre énormément de temps. D'autant plus que celui qui devra résoudre le conflit n'est pas forcément celui qui l'a provoqué. Je te laisse imaginer la frustration, surtout quand les collaborateurs ne se connaissent qu'à travers la toile.

ps: Je t'avoue qu'il m'est déjà arrivé de provoquer un conflit avec moi même, sur une autre branche :-)
Avatar de - http://www.developpez.com
le 16/12/2012 à 22:54
Mettre en commun des travaux provenant de plusieurs contributeurs est synonyme d'intégrer.
Et comme Baboon le fait en temps réel, il le fait donc en continue.
On est donc dans une solution d'intégration continue.
Il y a je pense des outils + adaptés pour cela (Jenkins par exemple)
Avatar de gangsoleil gangsoleil - Modérateur http://www.developpez.com
le 17/12/2012 à 12:50
Bonjour,

Citation Envoyé par nicolas.chambon  Voir le message
On est donc dans une solution d'intégration continue.

La plupart des solutions d'integration continue ne s'appliquent que sur du code deja commite, donc apres la resulution de conflit. Contrairement a ce qu'a l'air de faire Baboon, qui verifie "a chaque sauvegarde" [locale] si les lignes sont en conflit avec le code de quelqu'un d'autre.

Bon, comme je le pensais, ca ne fonctionne que sur les projets GIT, donc il ne s'agit pas de chaque sauvegarde dans l'editeur, mais dans chaque commit local. C'est donc bien pour les projets sous GIT, mais celui-ci etant tres tres peu utilise en entreprise, l'interet est malheureusement minime.

Il faudrait une version pour SVN ou CVS, et la, ca serait vraiment top.
Avatar de shadowmoon shadowmoon - Membre chevronné http://www.developpez.com
le 17/12/2012 à 18:02
Citation Envoyé par gangsoleil  Voir le message
Il faudrait une version pour SVN ou CVS

+10 000, très très bonne idée. J'ai récemment travaillé sur un projet où l'équipe, environ 30 personnes, était éclatée "aux 4 coins du monde" (USA, Japon, France, Brésil et Suède). Du coup, nous avez eu des "merge hell" très importants, avec le facteur aggravant du décalage horaire. Le plus "imposant" nous a nécessité 10 jours de travail non stop, 24h sur 24 (vive les décalages horaires lol).

Donc, dès que cette version est disponible, je demande à mon entreprise de se la procurer, vu qu'actuellement je suis dans une équipe morcelée entre la France, la Suisse et le Royaume-uni.
Avatar de gangsoleil gangsoleil - Modérateur http://www.developpez.com
le 18/12/2012 à 9:44
Citation Envoyé par shadowmoon  Voir le message
Donc, dès que cette version est disponible, je demande à mon entreprise de se la procurer, vu qu'actuellement je suis dans une équipe morcelée entre la France, la Suisse et le Royaume-uni.

Pour le coup, c'est beaucoup plus complexe.

En tres tres gros (pas taper), dans GIT, tu fais des commit dans un repository local tres regulierement. Ces commit n'impliquent personne d'autre que toi. Et c'est seulement lorsque tu repercutes ces commits sur le serveur central que les vrais merge sont faits.
Donc il est relativement aise de concevoir un programme qui, a chaque commit local, va regarder dans tous les repertoires locaux si un probleme de merge existe.

Dans CVS ou SVN, cette notion de commit local n'existe pas. Tant que tu fais des modifs sur ta machine, personne ne les voit.
Donc l'outil en question devrait s'intercaler entre la sauvegarde dans l'editeur (granularite trop fine) et le commit (granularite trop grosse qui provoque des merge hell). En gros, on prend un des concepts de GIT, et on l'implemente dans CVS/SVN...

Autre solution : un hook dans tous les editeurs utilises qui verifie a chaque sauvegarde. Attention, le reseau va en prendre un coup.

S'il n'y a qu'un seul editeur, genre un gros IDE, alors c'est surement plus simple, et plus realisable.
Avatar de Sandro Munda Sandro Munda - Membre actif http://www.developpez.com
le 19/01/2013 à 11:05
Citation Envoyé par gangsoleil  Voir le message
Bon, comme je le pensais, ca ne fonctionne que sur les projets GIT, donc il ne s'agit pas de chaque sauvegarde dans l'editeur, mais dans chaque commit local. C'est donc bien pour les projets sous GIT, mais celui-ci etant tres tres peu utilise en entreprise, l'interet est malheureusement minime.

Il faudrait une version pour SVN ou CVS, et la, ca serait vraiment top.

Bonjour,

Baboon est complètement indépendant du concept de "commit". La vérification se fait vraiment à chaque fichier sauvegarder!

Baboon est architecturé pour gérer n'importe quel SCM (Source Code Manager) en dessous. Par défaut, j'ai développé le plugin Git. Il suffit de développer un plugin SVN pour supporter subversion
Avatar de Sandro Munda Sandro Munda - Membre actif http://www.developpez.com
le 19/01/2013 à 12:47
Citation Envoyé par gangsoleil  Voir le message
Autre solution : un hook dans tous les editeurs utilises qui verifie a chaque sauvegarde. Attention, le reseau va en prendre un coup.

J'utilise inotify (et équivalent pour windows et osx) pour vérifier en temps réel les changements dans un répertoire. Une fois détect², un rsync inhouse est lancé (à travers le protocol XMPP pour les détails d'implémentation). Le réseau n'est donc pas ultra sollicité
Avatar de gangsoleil gangsoleil - Modérateur http://www.developpez.com
le 21/01/2013 à 8:51
Citation Envoyé par Sandro Munda  Voir le message
Bonjour,

Baboon est complètement indépendant du concept de "commit". La vérification se fait vraiment à chaque fichier sauvegarder!

Baboon est architecturé pour gérer n'importe quel SCM (Source Code Manager) en dessous. Par défaut, j'ai développé le plugin Git. Il suffit de développer un plugin SVN pour supporter subversion

Chapeau !
Si j'ai un peu de temps, j'essaierai de regarder si je peux faire quelque chose en ce sens.
Si quelqu'un veut s'y mettre, il a toute mon aide psychologique !!

Citation Envoyé par Sandro Munda  Voir le message
J'utilise inotify (et équivalent pour windows et osx) pour vérifier en temps réel les changements dans un répertoire. Une fois détect², un rsync inhouse est lancé (à travers le protocol XMPP pour les détails d'implémentation). Le réseau n'est donc pas ultra sollicité

Je ne pensais pas a ta maniere de faire, mais a l'integration dans un editeur : certains de ceux-ci ont tendance a faire beaucoup de choses inutiles, y compris sur le reseau.
Avatar de Sandro Munda Sandro Munda - Membre actif http://www.developpez.com
le 27/01/2013 à 17:57
Citation Envoyé par gangsoleil  Voir le message
Chapeau !
Si j'ai un peu de temps, j'essaierai de regarder si je peux faire quelque chose en ce sens.
Si quelqu'un veut s'y mettre, il a toute mon aide psychologique !!

Tu as toute mon aide si besoin est ;-) Je serai heureux de développer ca à plusieurs !
Offres d'emploi IT
Technical leader / moe perle (H/F)
Société Générale - Ile de France - Val de Marne
Ingénieur développeur intégrateur débutant H/F
Safran - Ile de France - Osny (95520)
Expert sécurité en audit d'applications (H/F)
Société Générale - Ile de France - Val-de-Marne

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Projets