Table des matières
Bonjour à tous,
Dans le monde des développeurs, il existe une multitude d’outils et frameworks éphémères dont tout le monde oublie très rapidement l’existence. Tig ne fait pas partie de ces outils mais plutôt de ceux qui constituent la base de la boîte à outils d’un développeur selon moi ! Cet article va vous présenter ce qu’est Tig et comment l’utiliser.
Préambule
Git, Tig, ce sont des outils à la base en anglais (Tig n’a pas de version française par exemple). Cet article va donc parfois utiliser des mots anglais voire franglais, mais c’est pour essayer de rendre le propos le plus compréhensible possible.
Je m’excuse pour les personnes qui vont s’en arracher les cheveux. Rassurez-vous, je m’arrache également les cheveux quand je vois digital (doigt) à la place de numérique.
Tig, qu’est-ce que c’est ?
Git est un outil formidable en ce qui concerne la gestion de versions de fichiers. On peut quasiment tout faire avec. Git a donc énormément d’options mais le revers de la médaille est qu’il est relativement difficile à utiliser.
C’est là que Tig entre en jeu. Sa description dans le man est la suivante:
Tig - interface en mode console pour Git
Tig est une interface en mode console (ncurses) pour Git. Elle fonctionne principalement comme un navigateur de dépôt Git mais peut assister pour stager des modifications pour des commits et agir comme un outil qui peut prendre les sorties des commandes Git et les afficher de façon plus lisible.
Tig est donc un outil qui fournit une interface pour Git dans un terminal. Son code source (majoritairement écrit en C) est disponible ici (miroir ici).
À la différence de plugins retrouvables dans certains IDE qui tentent de simplifier au maximum l’utilisation de Git au détriment de nombreuses fonctionnalités, Tig est une surcouche à l’outil Git. De plus, Tig a l’avantage d’être un outil ultra rapide (je n’ai jamais attendu pour la moindre commande) à la différence de Visual Studio Code ou autres qui mettent parfois pas mal de temps sur les gros dépôts Git.
À partir de maintenant, je pars sur l’hypothèse que vous connaissez Git. La suite de cet article vous sera alors utile pour découvrir ou approfondir vos connaissances sur Tig.
Installation
Sur Debian et dérivés, Tig s’installe simplement avec la commande apt install tig
(on retrouve la commande équivalente dans l’univers des RPM avec yum install tig
).
Pour les systèmes et distributions plus exotiques, voici les instructions d’installation.
Comment utiliser Tig ?
Pour utiliser Tig, rien de plus simple.
Il faut se placer dans un dossier git et lancer la commande tig
.
On arrive donc sur une page affichant les derniers commits. Les fonctionnalités basiques de tig sont également basiques dans leurs utilisations.
On peut par exemple naviguer avec les flèches haut et bas, appuyer sur Entrée pour voir les différences d’un commit.
Dans les différences d’un commit, on peut naviguer à l’aide des touches k et j (les flèches permettant de naviguer entre les commits). La touche q permet de quitter la vue actuelle (de quitter l’écran de droite des différences dans la capture ci-dessus). la touche / permet de rechercher dans la vue courante.
Si vous faites des modifications sur des fichiers (en dehors de l’outil Tig), il est possible de le rafraichir pour qu’il prenne en compte vos modifications. Cela se fait via la touche R.
Les vues
Tig est un outil qui fonctionne par vues. On a la vue principale (main) mais il en existe plein d’autres qui sont accessibles d’une touche (souvent depuis la page principale). La touche h par exemple affiche la page d’aide mais voici les autres vues existantes:
Touche | Vue | Description |
---|---|---|
m | view-main |
Afficher la page principale |
d | view-diff |
Afficher la page des différences |
l | view-log |
Afficher la page équivalent à git log |
t | view-tree |
Afficher l’arbre des dossiers/fichiers |
b | view-blame |
Afficher l’équivalent du git blame |
r | view-refs |
Afficher les références (branches, tags) |
s | view-status |
Afficher la page de statut (les derniers fichiers modifés) |
y | view-stash |
Afficher la vue des stashs |
g | view-grep |
Afficher la page de grep (grep dans le dossier Git) |
h | view-help |
Afficher la page d’aide |
Ce qu’il faut savoir sur les vues est que chacune est indépendante et possède ces propres raccourcis. C’est donc un peu compliqué à prendre en main au début, mais tellement puissant et satisfaisant quand on maîtrise !
Les commandes
Tig étant une surcouche de Git (de git log
pour être plus précis), on peut lui passer des arguments comme on le ferait à Git.
Je ne vais pas détailler toutes les vues du tableau précédent mais tout de même vous donner certains détails qui peuvent s’avérer utiles.
Si vous ne deviez en utiliser qu’une, tournez-vous vers la première présentée: la commande status.
Git status
Cette fonctionnalité est vraiment la plus utile de Tig selon moi (avec la page principale de Tig qui affiche les derniers commits dans un arbre lisible).
Pour y accéder, on fait la commande tig status
plutôt que git status
.
On pourrait également faire tig
puis la touche s pour afficher la vue status.
Cette vue divise les modifications faites sur les fichiers en 3 parties:
- Zone 1: Les fichiers prêts à être commités (ceux qui auraient été ajoutés via un
git add myfile.c
). - Zone 2: Les fichiers non stagés (ceux qui comportent des modifications mais n’ont pas encore été ajoutés via la commande
git add
). - Zone 3: les fichiers non suivis.
Imaginons que je modifie un fichier déjà existant et présent sous Git. Lorsque j’arrive dans cette vue, il arrive donc dans la zone 2. Je peux utiliser les flèches directionnelles pour le sélectionner et faire Entrée pour voir les modifications.
On peut ensuite utiliser les touches j et k pour naviguer dans les modifications du fichier (les touches directionnelles servent toujours pour la vue de gauche pour changer de fichier).
La force de la vue status repose sur les touches u et ! qui permettent respectivement de passer une modification de la zone 2 à la zone 1 et inversement (git add
et git reset HEAD
finalement).
Si on choisit un fichier, on peut donc appuyer sur u pour l’ajouter entièrement dans la zone 1. On peut également choisir un chunk pour n’ajouter dans la zone 1 que cette partie du fichier (sur la capture ci-dessus, on peut voir 2 chunks séparés par la délimitation en violet (les "@@ xx @@" pour les daltoniens).
Si on se rend compte qu’on a ajouté un fichier ou une partie de fichier mais qu’on ne veut finalement pas le committer, la touche ! fonctionne de la même façon mais dans l’autre sens (pour renvoyer les modifications sélectionnées dans la zone 2).
Enfin, pour des cas un peu plus rares, la touche 1 (le chiffre), permet de stager/déstager la seule ligne sélectionnée (utile pour faire un commit sur une ligne modifiée au milieu de plein de logs rajoutés par exemple).
Une dernière touche (pas du tout indispensable) pour cette vue est la touche C (uniquement lorsqu’aucun fichier n’est ouvert sur la partie droite). Cette commande permet simplement d’ouvrir votre éditeur Git configuré (vim par exemple) dans lequel vous pourrez écrire le message de votre commit puis le valider.
Git log
On peut faire git log README.md
ou bien tig README.md
, la version de tig sera bien plus lisible avec même plus d’informations.
Git blame
Le fameux git blame
pour incriminer un collègue sur un code pourri ou qui ne marche pas s’appelle de la même façon: git blame README.md
devient tig blame README.md
.
Il est également possible d’accéder à cette exacte même page uniquement en tapant tig
puis:
- Changer de vue pour afficher les dossiers et fichier (vue tree via la touche t).
- Naviguer pour se positionner sur le fichier voulu (flèches et touche Entrée).
- Changer de vue pour afficher le blame (touche b).
Peu importe la façon d’y accéder, le tig blame README.md
fonctionne très bien aussi comme je l’ai mentionné juste avant.
Le but reste d’être à l’aise et efficace dans l’utilisation de Tig, il n’est pas nécessaire de tout apprendre par cœur.
Une fois dans la vue blame, on peut sur la touche , pour afficher l’état du fichier dans le commit précédent (la touche < permet de revenir sur le commit suivant).
On retrouve ces touches dans la page d’aide (< est indiquée pour revenir sur l’état précédent et , est indiqué pour aller sur le parent). De façon générale, dès qu’une vue permettra ces actions, ces touches seront alors fonctionnelles.
Git stash
Stash est une commande de Git très utile. Mais ça devient très vite compliqué lorsque l’on en fait plusieurs. Par exemple pour regarder les contenus de différents stash, on ferait avec la commande Git:
git stash show -p stash@{0}
- puis
git stash show -p stash@{1}
, etc…
Avec Tig, on peut simplement faire un tig stash
ou bien tig
puis la touche y pour afficher la vue stash.
On voit alors les stash très simplement.
En se positionnant sur un stash, on peut faire ! pour le supprimer ou A pour l’appliquer.
Git grep
De base, la commande git grep
permet de faire un grep (une recherche) uniquement dans les fichiers présents dans l’index Git.
Vous l’aurez compris, tig grep
fera la même chose mais dans un affichage “à la Tig”.
On peut également faire tig
puis g puis taper notre recherche.
Tig refs
Une commande qui pour une fois n’est pas l’amélioration d’une commande Git mais une nouvelle commande est tig refs
ou tig
puis la touche r.
Elle affiche les références au sens Git (donc les branches et les tags) et permet un checkout rapide vers une autre branche via la touche C.
Cette commande est donc très pratique pour passer d’une branche à l’autre, très utile lors de développements à plusieurs personnes.
Ajouter des raccourcis personnalisés
Tout comme on a l’habitude (pour certains d’entre nous tout du moins) de customiser notre fichier ~/.vimrc
pour l’outil vim, on peut également modifier notre fichier ~/.tigrc
pour Tig.
La page de manuel de tigrc devrait vous donner toutes les billes.
Voici cependant une liste de bindings non officielle en guise d’exemples (dont certains sont déjà présents nativement).
A savoir qu’il existe principalement 4 mots clés:
- bind: pour définir une association entre un raccourci clavier et une action dans une vue.
- set: pour définir des variables avec une valeur.
- color: pour contrôler le thème de couleur utilisé.
- source: pour permettre le chargement d’autres fichiers de configuration.
Personnellement, je n’ai rajouté qu’un seul binding: bind status D ?@rm %(file)
.
Celui-ci permet de supprimer un fichier en appuyant sur la touche D (un message de confirmation va tout de même me demander de valider la suppression).
Pour rentrer dans le détail, ?
va permettre de demander la confirmation de la commande et @
va ensuite exécuter la commande en arrière-plan (tout ceci est documenté ici).
Plus de customisation
En plus du binding vu dans le paragraphe précédent, j’ai un alias associé à Tig dans mon fichier ~/.bashrc
:
alias tiga='tig --all'
La commande tig --all
vous présentera les derniers commits de toutes les branches dans un arbre lisible (là où la page principale classique n’affiche que votre branche et les éventuelles branches parentes mais pas celles qui ont dévié).
Conclusion
Tig est un outil ultra puissant tout comme Git. Toutes les fonctionnalités ne servent pas forcément mais on peut picorer ce dont on a besoin. Franchement, la page principale et la vue status sont simples à utiliser et vous feront gagner énormément de temps.
Ce serait une grande fierté d’apprendre que le temps que j’ai passé à écrire cet article aura permis à certains de franchir le cap et de commencer à utiliser Tig. Alors n’hésitez pas à faire votre retour d’expérience dans la section des commentaires ci-dessous !