Introduction à l'interface CLI de GitButler

GGitButler
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Bonjour à tous. Je m'appelle Scott Chacone, je suis le PDG de Git Brother.
00:00:02Je vais vous faire une petite démo du nouveau CLI Git Brother.
00:00:06Si vous êtes familiers avec la ligne de commande,
00:00:08et que vous voulez utiliser Git Brother de manière programmatique,
00:00:11ce nouveau CLI est un outil vraiment sympa.
00:00:14C'est parti. On va commencer avec un dépôt.
00:00:18J'ai ce petit projet en Rust,
00:00:20et on va passer en revue le flux de travail du CLI Git Brother.
00:00:23Il s'agit essentiellement d'une alternative directe à Git. Une fois installé,
00:00:27votre interface principale sera la commande "but" au lieu de Git.
00:00:32Vous pouvez lancer "but" ou "but status", qui est son raccourci.
00:00:35Cela vous affichera l'état du dépôt.
00:00:38C'est très proche du résultat d'un "git status".
00:00:41On voit qu'il y a quatre fichiers modifiés.
00:00:44Certains ne sont pas suivis, d'autres ont été changés.
00:00:47Il y a de nouveaux fichiers et des fichiers modifiés, mais avec "but",
00:00:50le statut affiche simplement une liste de quatre changements.
00:00:55Ce sont vos modifications. Vous pouvez les valider (commit)
00:00:59comme bon vous semble. On va simplement lancer "but commit".
00:01:02Ça va créer une branche temporaire. Essayons tout de suite.
00:01:05En relançant "but status", on voit que tous les changements sont regroupés.
00:01:11On peut aussi faire "but status -f" ou "--files".
00:01:15Cela montre précisément les fichiers modifiés dans ce commit.
00:01:18Mais supposons qu'on ne veuille pas tout mettre dans un seul commit.
00:01:21Certains concernent "Clod", un autre est un Readme,
00:01:24et un autre modifie le code. Ce sont trois changements distincts.
00:01:28On veut donc trois commits différents. On va annuler ça.
00:01:31On peut annuler un commit en lançant
00:01:36"uncommit". Et voilà, on est revenu en arrière. La branche temporaire est toujours là.
00:01:40On pourrait la supprimer, mais on va simplement la réutiliser.
00:01:44Je vais la renommer. Je l'appelle "Clod stuff".
00:01:48J'ai maintenant une nouvelle branche et je peux y indexer des fichiers,
00:01:53un peu comme un "git add". On fait : "but stage G0 H0".
00:01:58Ce sont les codes courts pour ces fichiers.
00:02:01On peut aussi taper le chemin complet,
00:02:04mais on essaie de rendre ça très rapide. Et là, on voit
00:02:08qu'ils sont indexés sur la branche "Clod stuff". Je peux committer avec "-o",
00:02:12ce qui signifie "uniquement ce qui est indexé". Si je fais juste "commit",
00:02:15ça prendrait tout ce qui est indexé ET ce qui ne l'est pas.
00:02:18Ce sera plus clair avec plusieurs branches,
00:02:20mais validons ça. On a maintenant une branche avec un commit
00:02:25et quelques modifications non indexées.
00:02:28C'est là que ça devient intéressant car, contrairement à Git,
00:02:31disons que je veuille valider ce Readme,
00:02:34le pousser et ouvrir une Pull Request (PR) pour lui.
00:02:37Normalement, si je suis sur la branche "Clod",
00:02:41je devrais remiser (stash) mon travail, ajouter le Readme, le committer,
00:02:44et le pousser pour la PR.
00:02:45Mais avec Git Brother, on peut avoir des branches parallèles.
00:02:50Je peux faire "but branch new readme" et vous voyez une nouvelle branche
00:02:55apparaître, et je peux y indexer le fichier.
00:03:00Je peux ensuite committer ce fichier.
00:03:01Si on regarde les fichiers modifiés,
00:03:07j'ai ce commit avec les deux éléments "Clod".
00:03:09Et j'ai ce Readme avec sa modification spécifique. Encore une fois,
00:03:11je peux faire la même chose. Je peux faire "commit",
00:03:17"-c" pour créer une nouvelle branche de cette façon. Voyons
00:03:21ce qu'on a vraiment modifié ici. J'ai oublié. Ah,
00:03:25cette commande "read". D'accord.
00:03:27Ça va prendre le dernier élément non committé
00:03:32pour l'ajouter à une nouvelle branche et le valider.
00:03:35On a désormais trois branches.
00:03:38Elles sont toutes indépendantes les unes des autres.
00:03:39Tous ces changements sont toujours dans notre répertoire de travail.
00:03:42On n'a absolument pas modifié l'état de nos fichiers locaux.
00:03:44On crée simplement des commits en mémoire.
00:03:46Maintenant, je lance "but push" et il me demande quoi pousser.
00:03:50Toutes les branches ? Elles ont chacune un commit local.
00:03:53Ou une seule ? Poussons seulement le Readme.
00:03:57Admettons que ce soit le seul qui soit prêt pour l'instant.
00:03:59On le sélectionne et il est poussé.
00:04:02En regardant à nouveau le statut,
00:04:03on voit que celui-ci est marqué comme poussé.
00:04:06Les autres restent uniquement en local.
00:04:08Git Brother est très puissant pour gérer plusieurs branches à la fois.
00:04:11Mais il gère aussi les branches empilées (stacked branches).
00:04:13Voyons un exemple : créer une nouvelle fonctionnalité
00:04:17basée sur l'un des commits que nous venons de faire,
00:04:19en créant une branche empilée par-dessus.
00:04:20Comme ça, on peut fusionner la base tout en continuant de travailler sur la suite.
00:04:23Supposons qu'on veuille créer une branche empilée.
00:04:26On veut que la commande "read" soit revue et fusionnée,
00:04:30mais on veut pouvoir continuer à l'améliorer.
00:04:32C'est le cas typique pour une branche empilée plutôt qu'indépendante
00:04:35car il y a une dépendance. Voici comment faire :
00:04:38"but branch new -a" pour définir le point d'ancrage,
00:04:42qui est "SC read command". Et on la nomme "SC read more".
00:04:46Maintenant, si on regarde,
00:04:48on voit bien cette branche empilée sur l'autre.
00:04:50Modifions cela.
00:04:52On voit que ça récupère 10 messages pour les afficher.
00:04:57Passons à 20 messages. Et on change ça aussi.
00:05:02On voit le changement et une icône de cadenas car
00:05:09on modifie un fichier déjà committé ailleurs.
00:05:11C'est donc verrouillé à un commit spécifique.
00:05:13On ne peut le valider que par-dessus, car il modifie du code
00:05:16introduit juste avant. On peut voir les changements avec "diff",
00:05:20ce qui est pratique pour voir les blocs modifiés, et on peut
00:05:25procéder au commit. Voilà.
00:05:28Pour montrer à quel point c'est facile de manipuler les commits,
00:05:32voici ce qu'on peut faire.
00:05:33Avec "status -f", on voit tous les fichiers.
00:05:37Partageons tout ça. On a vu "push" pour
00:05:40pousser vers le dépôt distant,
00:05:42mais on a aussi "PR" pour ouvrir une Pull Request. On fait :
00:05:46Pour lesquelles de ces branches voulez-vous créer une PR ?
00:05:48Ouvrons des Pull Requests pour tout le monde.
00:05:50Ça va ouvrir un éditeur pour chaque PR afin de
00:05:54rédiger la description. Je vais faire simple.
00:05:57Et voilà, toutes nos PR sont créées. Une fois ouvertes,
00:06:01on peut voir les numéros ici. Numéro 1, numéro 2...
00:06:04ce sont les numéros de PR et leurs messages.
00:06:06On a utilisé les mêmes à chaque fois.
00:06:08Avec l'option "-v" (verbose),
00:06:10on peut aussi voir les URLs de chacune.
00:06:12Jetons un œil à l'une d'elles.
00:06:14Voici la PR pour le Readme. On voit qu'elle ne contient
00:06:18qu'un seul commit et seulement la modif du fichier Readme. C'est isolé.
00:06:23Voici celle qui est empilée.
00:06:24En regardant de plus près, on voit
00:06:28qu'elle a bien créé une pile. La première,
00:06:30la PR du bas, cible la branche principale (main).
00:06:35Et la seconde, que voici, cible la première.
00:06:39L'empilement de branches est géré correctement.
00:06:41Voyons maintenant ce qui se passe quand on intègre un changement.
00:06:43Allons sur la PR du Readme. Disons que
00:06:46tout est bon et fusionnons-la. C'est maintenant sur le dépôt distant.
00:06:49Si on lance "but pull --check", ça va vérifier l'état.
00:06:55On peut aussi faire "but fetch".
00:06:57Le CLI fait aussi des récupérations en arrière-plan régulièrement.
00:07:00Vous l'avez peut-être vu lors de certaines commandes.
00:07:02Il indique qu'une tâche de fond a été lancée. On voit que celle-ci
00:07:06est intégrée en amont. Donc, quand on fait "but pull",
00:07:10il va récupérer les nouvelles infos.
00:07:13Il va rebaser nos autres branches et retirer la branche
00:07:16déjà intégrée. On voit qu'elle a été supprimée localement.
00:07:19Celle-là est terminée,
00:07:22les autres ont été rebasées pour être à jour, et on peut
00:07:25les repousser si on le souhaite. À tout moment,
00:07:29si vous voulez revenir à Git classique, faites "but tear down".
00:07:33Ça vous demandera de choisir une de vos branches.
00:07:36Par défaut, il choisit la première branche sur laquelle vous étiez,
00:07:39mais vous gardez toutes les branches sur lesquelles on travaillait.
00:07:43C'est juste que Git classique ne peut en gérer qu'une à la fois.
00:07:47Utilisez "setup" et "tear down" pour entrer ou sortir du mode Git Brother.
00:07:50Pratique pour gérer plusieurs branches ou revenir aux outils Git classiques.
00:07:55Notez qu'en mode Git Brother, la plupart des commandes Git
00:08:00fonctionnent toujours. Un "git show" donnera le même résultat.
00:08:04Idem pour un "git log".
00:08:08Toutes les commandes de lecture fonctionnent parfaitement.
00:08:13C'est vraiment la gestion des commits que nous gérons pour vous.
00:08:16On peut aussi changer de branche directement avec Git : Git Brother le verra
00:08:21et désactivera ce qu'il était en train de faire.
00:08:24Tout redeviendra normal.
00:08:26Dernière chose : toutes ces commandes ont une
00:08:30version JSON. Pour un statut en JSON, utilisez "--json".
00:08:34Si vous voulez afficher un commit en JSON, c'est possible.
00:08:41Presque toutes les commandes le proposent.
00:08:44Consultez "but help" pour les voir. Presque toutes
00:08:48ont une option "--json" ou "-j".
00:08:52C'est donc très facile de créer des scripts. Plus étonnant,
00:08:56on peut même faire un "diff" et obtenir une version JSON,
00:09:00ce que je trouve vraiment génial.
00:09:01C'était une petite introduction à Git Brother et ses avantages.
00:09:05Vous pouvez l'ajouter à n'importe quel dépôt Git.
00:09:08Lancez "but setup" et commencez à utiliser ces commandes.
00:09:12Profitez de l'export JSON, gérez plusieurs branches à la fois,
00:09:15utilisez les branches empilées,
00:09:17l'intégration GitHub et la gestion des PR.
00:09:20Il suffit de l'installer et de lancer les commandes "but".
00:09:24Et si vous voulez revenir à Git seul,
00:09:26même si la plupart des commandes Git marchent encore ici,
00:09:29faites un "tear down" ou un "checkout" pour tout nettoyer.
00:09:33N'hésitez pas à l'essayer dès aujourd'hui.
00:09:35Rendez-vous sur [gitbrother.com/cli](https://www.google.com/search?q=https://gitbrother.com/cli) pour le télécharger.
00:09:39Rejoignez notre Discord pour nous donner votre avis. Merci !

Key Takeaway

GitButler CLI modernise le flux de travail Git en permettant la gestion simultanée de plusieurs branches indépendantes ou empilées avec une intégration GitHub native et un support JSON complet.

Highlights

Introduction de la commande "but" comme alternative directe et programmable à l'interface Git classique.

Capacité unique de gérer plusieurs branches en parallèle sans modifier l'état des fichiers locaux grâce aux commits en mémoire.

Gestion native des branches empilées (stacked branches) pour gérer les dépendances entre fonctionnalités.

Intégration fluide avec GitHub permettant de pousser des modifications et d'ouvrir des Pull Requests directement depuis le CLI.

Compatibilité ascendante permettant d'utiliser les commandes de lecture Git habituelles (log

Timeline

Introduction et premiers pas avec la commande 'but'

Scott Chacone, PDG de GitButler, présente la nouvelle interface en ligne de commande conçue pour une utilisation programmatique. L'outil remplace la commande traditionnelle 'git' par 'but', offrant une interface familière mais optimisée. La commande 'but status' affiche les modifications de manière simplifiée, regroupant les fichiers modifiés et non suivis. L'utilisateur peut effectuer un premier 'but commit' qui génère automatiquement une branche temporaire pour isoler le travail. Cette section souligne la rapidité d'exécution et la simplicité visuelle de l'outil par rapport au flux Git standard.

Gestion granulaire des commits et indexation rapide

Cette séquence démontre comment annuler un commit groupé avec 'uncommit' pour mieux organiser son travail. Le présentateur introduit l'utilisation de codes courts (comme G0 ou H0) pour indexer des fichiers via 'but stage', ce qui accélère considérablement le processus. Il explique l'option '-o' de la commande commit, qui permet de ne valider que les éléments explicitement indexés. Cette approche permet de séparer proprement différents changements, comme la documentation et le code, au sein d'un même projet. L'objectif est de montrer la flexibilité de GitButler pour structurer l'historique de manière précise dès le départ.

Branches parallèles et flux de travail multi-branches

Le cœur de l'innovation de GitButler réside dans sa capacité à gérer des branches parallèles sans recourir au 'stash' de Git. L'utilisateur peut créer une nouvelle branche pour un Readme tout en conservant d'autres modifications actives dans son répertoire de travail. Les commits sont créés en mémoire, ce qui signifie que l'état des fichiers locaux reste inchangé malgré la présence de plusieurs branches logiques. Lors de l'utilisation de 'but push', l'outil propose de choisir quelle branche spécifique envoyer sur le dépôt distant. Cette fonctionnalité élimine la friction liée au changement constant de contexte entre les différentes tâches en cours.

Branches empilées et gestion des dépendances

Le tutoriel aborde ensuite les branches empilées (stacked branches), une méthode avancée pour gérer des fonctionnalités dépendantes. En utilisant 'but branch new -a', on ancre une nouvelle branche sur un commit existant pour continuer le développement sans attendre la fusion du premier bloc. Un système de verrouillage (icône cadenas) apparaît pour signaler que l'on modifie un fichier déjà présent dans un commit parent de la pile. La commande 'diff' permet de visualiser précisément les blocs de code modifiés dans ce contexte hiérarchique. Cette méthode est cruciale pour les développeurs travaillant sur des suites de fonctionnalités complexes nécessitant des révisions distinctes.

Création de Pull Requests et intégration GitHub

L'intégration avec GitHub est démontrée par la commande 'but PR', qui permet de créer des Pull Requests pour plusieurs branches simultanément. L'outil ouvre un éditeur pour saisir les descriptions et gère automatiquement l'envoi des données vers le serveur distant. On observe que les numéros de PR et les URLs associées sont directement accessibles depuis le terminal via l'option verbeuse '-v'. Une démonstration dans l'interface web de GitHub confirme que la structure de la pile est respectée, la branche supérieure ciblant la branche inférieure. Cette automatisation réduit les allers-retours entre le terminal et le navigateur pour la gestion du cycle de vie du code.

Synchronisation, rebasing et retrait du mode GitButler

Après la fusion d'une PR sur GitHub, la commande 'but pull' synchronise l'état local en supprimant les branches intégrées et en rebasant les branches restantes. GitButler effectue des tâches de fond régulières pour maintenir le dépôt à jour, signalées par des notifications discrètes dans le CLI. Si l'utilisateur souhaite revenir à un usage classique, la commande 'but tear down' permet de sortir proprement du mode GitButler en choisissant une branche active. Le présentateur insiste sur le fait que les commandes de lecture Git comme 'log' ou 'show' restent parfaitement fonctionnelles durant l'utilisation de l'outil. Cette interopérabilité garantit que l'utilisateur n'est jamais bloqué dans un système propriétaire fermé.

Automatisation via JSON et conclusion

La vidéo se termine sur les capacités d'automatisation de l'outil grâce à l'export JSON disponible pour presque toutes les commandes avec l'option '--json'. Cela inclut les statuts, les détails des commits et même les résultats de 'diff', rendant GitButler extrêmement puissant pour le scripting. Scott Chacone invite les développeurs à tester l'outil sur n'importe quel dépôt existant via 'but setup' pour découvrir ces avantages par eux-mêmes. Le lien de téléchargement et le serveur Discord communautaire sont fournis pour obtenir de l'aide ou partager des retours. L'accent final est mis sur la simplicité de test : il suffit d'un 'checkout' ou d'un 'tear down' pour retrouver un environnement Git standard.

Community Posts

View all posts