À propos du projet

Simgit est un outil en ligne de commande conçu pour créer et gérer des worktrees Git avec une efficacité disque améliorée et une isolation renforcée, principalement destiné aux scénarios impliquant plusieurs agents IA ou des efforts de développement parallèle sur un même dépôt. Il y parvient grâce à des mécanismes de copy-on-write (CoW), garantissant que les fichiers inchangés partagés entre plusieurs worktrees occupent un seul espace disque physique au lieu d'être dupliqués. L'outil prend en charge divers systèmes d'exploitation et systèmes de fichiers : * **macOS (APFS)** : exploite le `clonefile` natif, sans dépendances. * **Linux (btrfs, xfs)** : utilise les capacités reflink natives, sans dépendances. * **Linux (ext4, etc.)** : recourt à `fuse-overlayfs` pour la fonctionnalité CoW, sans nécessiter de droits root ni de modules noyau. * **Windows** : non supporté nativement, mais utilisable via WSL avec un système de fichiers Linux pris en charge. Simgit fonctionne sans daemon ni serveur ; il s'appuie sur Git pour les références et sur le système de fichiers pour la gestion des données. Chaque worktree se comporte comme une vérification liée Git standard, offrant une isolation complète des branches, index et arbres de travail. Cela permet aux agents de travailler en parallèle sur leurs propres branches et d'intégrer les changements via des fusions Git classiques. Le principal avantage est le coût marginal de chaque worktree supplémentaire, nettement inférieur à celui d'une copie classique `git worktree`. Les mesures montrent une évolution des coûts proportionnelle au nombre de chemins suivis (environ 0,4 KiB par chemin suivi plus environ 60 KiB de surcharge fixe sur APFS), et non pas par rapport à la taille du contenu. Cela rend l'outil particulièrement efficace pour les dépôts contenant de gros fichiers. Simgit propose des commandes pour ajouter, lister, supprimer et effectuer le garbage collection des worktrees. La commande `sg run` permet de lancer des agents au sein de ces worktrees isolés, leur donnant l'impression de fonctionner dans une vérification ordinaire. Il prend également en charge les sparse checkouts afin de réduire davantage l'occupation disque pour les agents focalisés sur des sous-arborescences spécifiques. Les worktrees peuvent être marqués comme éphémères pour un garbage collection automatique ou persistants pour un usage à long terme. L'outil fournit également des sorties au format JSON pour une orchestration programmatique.