Sachez toujours dans quelle branche Git vous vous trouvez grâce à cette astuce Linux
Sommaire
Principaux points à retenir
- Travailler avec des branches dans Git est rapide et facile, et nous sommes encouragés à le faire fréquemment comme une bonne pratique de travail.
- Parce que c’est un processus tellement trivial, un changement de branche ne reste pas toujours gravé dans votre esprit.
- Modifiez votre invite de commande pour afficher automatiquement votre branche Git actuelle et vous saurez toujours dans quelle branche vous vous trouvez.
Utiliser des branches dans Git est tellement simple que nous le faisons souvent. À tel point qu'il n'est pas facile de garder une trace de votre branche actuelle. Avec cette astuce, vous n'oublierez jamais votre branche actuelle.
Suivi des branches Git
Les branches sont essentielles dans le contrôle de version. Elles vous permettent de travailler sur de nouvelles fonctionnalités ou de modifier le code existant, sans affecter la branche principale du code source.
Travailler avec des branches dans Git est un jeu d'enfant par rapport à d'autres logiciels de contrôle de version. Créer de nouvelles branches et modifier des branches sont des processus très légers, qui se déroulent donc en un clin d'œil. Et comme c'est si rapide et facile, les développeurs ont tendance à le faire souvent.
C'est presque trop facile. Comme Git rend le changement de branche trivial, vous pouvez le faire presque aussi inconsciemment que vous pourriez changer de répertoire. Mais il est très important de savoir dans quelle branche vous vous trouvez.
Cette astuce permet d'afficher votre branche Git actuelle dans votre invite de commande Bash. Et le plus intéressant, c'est que si votre répertoire actuel ne contient pas de dépôt Git, vous verrez votre invite de commande habituelle.
Obtenir votre branche Git sous forme de chaîne
Pour que cela fonctionne, nous devons pouvoir obtenir la branche Git actuelle sous forme de chaîne de texte que nous insérons dans l'invite de commande. Exécutons la commande Git standard pour répertorier les branches du référentiel.
git branch
Ceci répertorie toutes les branches du dépôt. La branche actuelle, la partie sauvegardée, est signalée par un astérisque. C'est la seule ligne contenant un astérisque. Cela signifie que nous pouvons canaliser la sortie de la commande git vers sed et utiliser les fonctionnalités de manipulation de flux de la commande sed pour supprimer les lignes sans astérisque. Pour la seule ligne restante, nous pouvons utiliser sed pour supprimer l'astérisque et l'espace.
git branch | sed -e '/^(^*)/d' -e 's/* (.*)/1/'
Cela nous donne le nom de la branche actuelle. Il existe des moyens plus simples de le faire, mais pour être complet, voici comment fonctionne cette commande.
Nous émettons la commande git branch standard.
git branch
La sortie est canalisée vers sed. Il existe deux expressions sed. La première expression supprime les lignes qui ne le faites pas contenir un astérisque.
-e '/^(^*)/d'
La deuxième expression supprime l'astérisque et l'espace de début de la ligne restante.
-e 's/* (.*)/1/'
Cela fonctionne, mais tout le monde n'est pas familier ou à l'aise avec sed. Lorsque vous examinerez cela dans six mois, est-ce que cela aura du sens ? Nous pouvons utiliser git et Bash pour concevoir une méthode plus simple.
L'opérateur Bash && nous permet d'enchaîner des commandes afin qu'elles soient exécutées les unes après les autres. Pour qu'une commande de la chaîne soit exécutée, la commande précédente doit être exécutée avec succès. Comme nous le verrons, nous pouvons utiliser cela à notre avantage.
Un autre élément qui joue en notre faveur est que, depuis la version 2.2, la commande git branch dispose d'une option appelée –show-current. Celle-ci affiche le nom de la branche actuelle seule.
git branch
C'est un moyen plus simple d'obtenir le nom brut de la branche Git actuelle. Le seul problème est qu'il génère un message d'erreur si le répertoire actuel ne contient pas de dépôt Git. Nous devons donc nous assurer que la commande ne soit pas exécutée si nous ne sommes pas dans un dépôt Git.
Il existe une commande git appelée git status. Elle indique l'état du dépôt Git. Si la commande échoue, comme c'est le cas s'il n'y a pas de dépôt sur lequel générer le rapport, sa valeur de sortie est 128.
git status
echo $?
Dans un répertoire avec un référentiel, sa valeur de sortie est zéro.
git status
echo $?
Nous pouvons enchaîner cette commande et notre commande git branch, de sorte que la commande git branch ne s'exécute que si la commande git status renvoie zéro. L'autre chose que nous allons faire est de rediriger toutes les sorties d'écran de la commande git status vers /dev/null, un pseudo-fichier qui consomme silencieusement tout ce qui lui est envoyé.
git status &> /dev/null && echo " $(git branch --show-current)"
cd taf
git status &> /dev/null && echo " $(git branch --show-current)"
Nous avons supprimé toutes les sorties de la commande git status, ce qui est précisément ce dont nous avons besoin. Dans un répertoire qui ne contient pas de référentiel, il n'y a pas de sortie d'écran. Dans un répertoire contenant un référentiel, nous voyons le nom de la branche actuelle.
Nous pourrions simplement laisser la commande git branch écrire le nom de la branche actuelle dans la fenêtre du terminal tel quel, mais en l'enveloppant dans une commande echo, nous pouvons inclure un espace de début. L'espace séparera le nom de la branche du nom du répertoire dans l'invite de commande, ce qui le rendra plus facile à voir en un coup d'œil.
Ajout de la chaîne à votre invite Bash
Nous avons obtenu le nom de la branche Git actuelle et nous avons trouvé un moyen de l'afficher à l'écran, formaté avec un espace de début. Nous allons maintenant l'intégrer dans l'invite de commande.
Nous allons créer une fonction pour contenir les commandes que nous avons créées jusqu'à présent et appeler cette fonction à partir de la définition de l'invite de commande. Chaque fois que l'invite de commande s'affiche, notre fonction sera appelée.
Dans Bash, la définition de l'invite de commande se trouve généralement (mais pas toujours) dans le fichier .bashrc. Il s'agit d'un fichier système caché, situé dans votre répertoire personnel.
Utilisez votre éditeur préféré pour éditer le fichier .bashrc.
Recherchez la ligne qui définit votre invite de commande. Elle commence généralement par :
PS1=
Sur cet ordinateur Ubuntu, la ligne que nous voulons est :
PS1='${debian_chroot:+($debian_chroot)}( 33(01;32m)u@h( 33(00m):( 33(01;34m)w( 33(00m)$ '
Il y a une autre ligne « PS1= » en dessous de celle-ci, mais elle est beaucoup plus courte. Si vous lisez ce qui se passe dans le bloc if-then, vous verrez qu'une invite est destinée aux écrans couleur et une autre aux écrans monochromes. Si vous utilisez Git, vous êtes un codeur. Vous serez bientôt en mesure de déterminer avec quelle invite vous devez travailler.
Nous allons ajouter notre fonction au-dessus du bloc if-then. Je l'appelle get_git_branch.
Elle contient les mêmes commandes que celles que nous avons utilisées sur la ligne de commande. Nous devons maintenant déterminer où appeler la fonction, dans la définition de l'invite de commande.
C'est le fin de la définition rapide.
w( 33(00m)$ '
Voilà comment c'est fait.
w
Il s’agit d’un jeton qui est remplacé par le répertoire de travail lorsque l’invite de commande s’affiche.
( 33(00m)
Il s'agit d'un code couleur ASCII. Il rétablit la couleur du texte sur blanc, de sorte que le signe dollar « $ » dans l'invite s'affiche en texte blanc.
$ '
Cela affiche le signe dollar, un espace, puis ferme la définition de l'invite de commande avec un guillemet simple.
Nous allons appeler notre fonction immédiatement après le jeton 'w'. Nous allons également insérer un code couleur pour afficher la branche Git actuelle en jaune, afin de la faire ressortir. C'est le texte que nous allons insérer.
(033(01;33m)$(get_git_branch)
Notez qu'il n'y a aucun espace dans notre texte inséré. Voici à quoi ressemble l'invite de commande complète avec nos ajouts.
PS1='${debian_chroot:+($debian_chroot)}( 33(01;32m)u@h( 33(00m):( 33(01;34m)w( 33(01;33m)$(get_git_branch)( 33(00m)$ '
Enregistrez vos modifications et fermez l'éditeur. Fermez vos fenêtres de terminal et ouvrez une nouvelle fenêtre de terminal. Vous verrez une invite de commande normale. Accédez à un répertoire contenant un dépôt Git.
pwd
cd taf
Le nom de la branche Git actuelle s'affiche en jaune. Si vous extrayez une autre branche, votre invite de commande change immédiatement.
git checkout timed-events
Ce n'est pas seulement pour Git
Vous pouvez utiliser cette méthode pour afficher tout type d’informations que vous pouvez collecter avec des outils de ligne de commande.
Par exemple, si vous créez cette fonction et l'appelez depuis votre invite au lieu d'appeler get_git_branch, vous verrez l'heure dans votre invite.
get_time() {
echo " $(date +%r)"
}