- Manyana est un prototype de contrôle de version basé sur les CRDT développé par Bram Cohen, qui propose une nouvelle approche pour éliminer les conflits de fusion et préserver structurellement l’historique
- En s’appuyant sur les CRDT (Conflict-Free Replicated Data Type), la fusion réussit toujours, et les conflits sont traités comme de simples indications d’information, ce qui permet aux utilisateurs de comprendre clairement les modifications
- Les principes clés sont la persistance de l’ordre des lignes, les fusions non bloquantes et l’intégration de l’historique dans la structure ; même lors d’un rebase, les enregistrements existants ne sont pas détruits
- Il s’agit d’une implémentation de démonstration écrite en environ 470 lignes de Python, dont l’intégralité du code et du document de conception est publiée sur GitHub dans le domaine public
- Un exemple expérimental qui propose un modèle de contrôle de version de nouvelle génération sans échec de fusion, au-delà des limites de Git
Manyana : une vision cohérente pour l’avenir du contrôle de version
- Manyana est un prototype de système de contrôle de version basé sur les CRDT publié par Bram Cohen, qui cherche à résoudre le problème des conflits de fusion des systèmes existants
- Les CRDT garantissent que la fusion réussit toujours et traitent les conflits comme des indications informatives, afin que l’utilisateur puisse voir clairement les modifications réelles
- Cette approche repose sur trois caractéristiques essentielles : la persistance de l’ordre des lignes, la gestion non bloquante des conflits et l’intégration de l’historique dans la structure
- Même lors du rebase, l’historique existant est conservé, et des structures de fusion complexes sans ancêtre commun unique peuvent être traitées de manière fiable
- Manyana est une implémentation de démonstration d’environ 470 lignes de Python, dont le document de conception et le code sont publiés sur GitHub dans le domaine public
Les points clés de l’approche basée sur les CRDT
- Les CRDT offrent une fusion toujours réussie et une cohérence éventuelle (eventual consistency) garantissant le même résultat quel que soit l’ordre des fusions
- Même si plusieurs utilisateurs fusionnent des branches développées indépendamment dans un ordre quelconque, le résultat reste identique
- Grâce à la persistance de l’ordre des lignes, une fois que l’ordre du code inséré au même endroit est déterminé, il reste ensuite inchangé
- Cela évite que les zones en conflit soient résolues différemment selon les branches
- Les conflits sont traités uniquement comme des marqueurs d’information, sans bloquer la fusion
- Le résultat de la fusion est toujours produit, et les conflits sont signalés comme des « parties modifiées simultanément à proximité »
- En suivant l’auteur et l’action de chaque modification, le système fournit des indications de conflit utiles
- L’historique est intégré dans la structure
- L’état est représenté par une structure de « weave » contenant toutes les lignes du fichier, avec pour chaque ligne des métadonnées sur son ajout et sa suppression
- Lors d’une fusion, il suffit d’entrer deux états, sans rechercher d’ancêtre commun ni parcourir un DAG, pour obtenir systématiquement le bon résultat
Un affichage des conflits amélioré
- Les systèmes de contrôle de version traditionnels se contentent souvent d’afficher deux blocs de code côte à côte en cas de conflit, obligeant l’utilisateur à déduire lui-même les différences
- Manyana indique explicitement chaque zone de conflit par « supprimé », « ajouté », etc., et précise qui a effectué quelle modification
- Par exemple, si un utilisateur supprime une fonction tandis qu’un autre ajoute une ligne à l’intérieur de cette fonction, Manyana distingue clairement la structure de chaque modification
- Au lieu de comparer deux blocs, l’utilisateur peut ainsi saisir immédiatement le sens et le contexte des changements
Redéfinir le rebase
- Dans un système basé sur les CRDT, le rebase ne détruit pas l’historique
- Le rebase traditionnel réempile des commits sur une nouvelle base et crée ainsi un historique fictif
- Avec Manyana, on obtient le même effet tout en conservant l’intégralité de l’historique d’origine
- Pour cela, il suffit d’ajouter au DAG une annotation d’« ancêtre principal » (primary ancestor)
- Cette méthode fonctionne de manière fiable même avec des structures de fusion sans ancêtre commun, et permet d’éviter les échecs des fusions 3-way traditionnelles
État actuel du projet
- Manyana n’est pas un système de contrôle de version complet, mais une implémentation de démonstration fonctionnant à l’échelle du fichier individuel
- Elle est composée d’environ 470 lignes de code Python
- Les fonctionnalités de cherry-pick et d’undo local ne sont pas encore implémentées, mais le README présente les orientations prévues
- Le projet montre qu’un contrôle de version basé sur les CRDT peut résoudre des problèmes d’UX et produire de meilleurs résultats que les outils existants
- L’ensemble du code est distribué dans le domaine public (public domain), et l’intégralité du document de conception figure dans le README GitHub
Résumé des réactions de la communauté
- Un utilisateur estime que, même si Git est utilisé depuis plus de dix ans, un nouveau paradigme de contrôle de version est nécessaire, et mentionne positivement la tentative de Manyana
- Il souligne que l’idée d’une fusion qui réussit toujours n’est pas intuitive et demande davantage d’exemples et d’explications
- Il se dit intéressé par l’idée d’améliorer le rebase et indique utiliser, dans ses projets personnels, une méthode de gestion des fusions via des branches intermédiaires
- Il pointe certaines limites de Git, notamment la gestion des fichiers binaires, la confusion entre branches gauche et droite, et le manque de synthèse pour les changements de code à grande échelle
- Il suggère que les futurs systèmes de contrôle de version pourraient prendre en charge une approche token-aware ou des plugins par langage et par format de fichier
- Un autre utilisateur demande si Manyana repose sur des bases similaires à Pijul ou Darcs, et souhaite une comparaison avec les problèmes de performance de Darcs et l’état actuel de Pijul
Conclusion
- Manyana est une démo concrète appliquant les CRDT au contrôle de version, qui repense en profondeur la gestion des conflits et la question du rebase
- Une structure sans échec de fusion, la transformation des conflits en information et l’intégration structurelle de l’historique dessinent une direction de conception qui dépasse les limites du modèle Git actuel
- Ce n’est pas encore un système complet, mais c’est un point de départ significatif comme plan de conception pour les systèmes de contrôle de version de nouvelle génération
Aucun commentaire pour le moment.