Git WithMe - Pour une collaboration Git P2P chiffrée sans serveur ni GitHub
Alors comme ça, vous êtes encore un projet top secret qui va changer la face du monde et vous voulez le partager avec votre meilleur pote sans que la NSA, Mark Zuckerberg ou votre ex sociopathe puissent y jeter un œil ? Ou peut-être que vous en avez juste marre de créer un nouveau repo GitHub chaque fois que vous voulez rapidement coder à quatre mains sur un truc qui ne vivra pas plus longtemps que la probité d’un homme politique ?
Et bien j’ai une bonne nouvelle pour vous ! Ça s’appelle Git WithMe et c’est là pour résoudre ce problème de la façon la plus geek et la plus élégante possible.
Git c’est génial, on l’utilise tous, mais parfois le workflow ça devient un lance-flammes qu’on sort pour allumer une bougie. Par exemple, on veut juste partager 20 lignes de code avec un pote qui est à côté de nous dans un meetup, et nous voilà en train de créer un repo, configurer les accès, expliquer à notre firewall que oui, c’est normal que des connexions arrivent sur le port 9418, et prier pour que l’IP dynamique de la machine ne change pas au milieu de la session…
Bref, c’est comme vouloir partager un casse dalle avec un collègue assis en face de nous, sauf qu’on doit l’envoyer par la poste avec accusé de réception.
Et je ne vous parle même pas des “solutions enterprise” qui nécessitent 3 formulaires, 2 approbations et une danse rituelle pour créer un simple dépôt temporaire. Dans certaines boîtes, le temps que votre repo soit approuvé, le stagiaire pour qui vous l’avez créé a déjà fini son stage et lancé sa startup.
C’est là que Git WithMe entre en scène ! Cet outil utilise la technologie Magic Wormhole pour créer un tunnel P2P chiffré entre vous et vos collaborateurs comme ceci :
- Vous lancez Git WithMe sur votre dépôt local
- L’outil génère un code court et unique (genre “7-banana-rocket”)
- Vous partagez ce code avec votre pote (via Signal, Telegram ou en criant à travers la pièce)
- Votre collègue utilise ce code pour se connecter directement à votre repo
- BOUM ! La magie opère, vous pouvez collaborer comme si vous aviez un serveur Git, mais sans le serveur
Le plus beau dans tout ça c’est que tout est chiffré de bout en bout. Même le serveur “mailbox” qui aide à établir la connexion initiale ne peut pas voir vos données. C’est comme un tunnel SSH, mais sans toute la galère de configuration qui va avec.
La sécurité est d’ailleurs plutôt bien pensée puisque les codes d’invitation sont à usage unique. Ainsi, si un attaquant essaie de deviner votre code, il n’a qu’une seule chance. S’il se plante (et croyez-moi, il se plantera), le mailbox est détruit et le destinataire légitime verra une erreur “crowded”. Simple, efficace, brutal.
Assez parlé, passons à la pratique.
Côté hôte (vous qui partagez votre code) :
# Installation (une seule fois)
python -m venv ~/gwm-venv
~/gwm-venv/bin/pip install git-withme
export PATH=~/gwm-venv/bin:$PATH
# Dans votre dépôt Git
cd ~/projet-secret
git withme
Et là, comme par magie, votre terminal va vous afficher quelque chose comme :
Vous noterez au passage le code d'invitation "7-banana-rocket" (le vôtre sera différent, évidemment). C'est ce code que vous allez partager avec votre collaborateur.
Côté collaborateur :
# Installation (pareil que vous)
python -m venv ~/gwm-venv
~/gwm-venv/bin/pip install git-withme
export PATH=~/gwm-venv/bin:$PATH
# Rejoindre votre session
git withme --repo ~/destination accept 7-banana-rocket
À partir de là, votre collaborateur verra quelque chose comme :
welcome ws://relay.magic-wormhole.io:4000/v1
Peer has connected.
git:
git: Cloning into '~/destination'...
git:
You can now use normal git commands in ~/destination
"git pull": update from the host
"git push": push changes to the host
Et voilà ! Vous êtes connectés comme si vous aviez un serveur Git entre vous, mais sans serveur. Votre pote peut maintenant faire des modifs, commiter, et push comme d’habitude. Et vous, vous pouvez récupérer ses changements avec un simple
git pull gitwithme main
.
Le seul “truc” à retenir c’est que les deux terminaux doivent rester ouverts. Si l’un de vous ferme sa session, la connexion est rompue. C’est le prix à payer pour cette simplicité et cette sécurité. Si les deux côtés sont déconnectés pendant plus de 10 minutes, la session sera également terminée.
Cet outil n’est donc pas fait pour remplacer GitHub ou GitLab dans votre workflow quotidien mais c’est parfait pour les hackathons et coding parties pour ne pas perdre de temps en configuration.
C’est aussi idéal dans les entreprises dont les politiques sont trop restrictives ou encore pour les sessions de pair programming improvisées quand un ami a besoin d’aide sur son code. Au lieu de regarder par-dessus son épaule ou d’utiliser des outils de partage d’écran, utilisez Git WithMe et codez ensemble proprement.
Et si vous travaillez sur un exploit zero-day top secret ou un projet que même votre plante verte préférée ne doit pas connaître, Git WithMe permet de garder tout en local et chiffré.
Bref, une solution de collaboration Git éphémère, chiffrée et sans infrastructure, c’est franchement brillant comme idée, vous ne trouvez pas ?