[Outils/Tutoriel] Tig, indispensable pour profiter de Git à 100%

Publié le 27 juin 2021

Outils Tutoriel Open Source Informatique

 Attention, cet article date de plus d'un an. Les informations qu'il contient sont peut-être obsolètes. 

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.

Tig - Vue principale
Tig - Vue principale

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.

Tig - Différences sur un commit
Tig - Différences sur 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.

Tig - Vue status avec les modifications d'un fichier de la zone 2
Tig - Vue status avec les modifications d'un fichier de la zone 2

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.

Tig - Vue log
Tig - Vue log

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.

Tig - Vue blame
Tig - Vue blame

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.

Tig - Vue stash
Tig - Vue stash

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 - Vue grep
Tig - Vue grep

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.

Tig - Vue refs
Tig - Vue refs

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 !

Commentaires




Ailleurs sur le Web


Home Screen Advantage - Infrequently Noted

A slide from Apple's presentation in Apple v. Epic, attempting to make the claim Epic could have just made a PWA if they didn't like the App Store terms because circa '20 Safari was so capable. LOL. Je n'aurai pas assez de popcorn pour le DM…

via Shaarli le 28 février 2024

800 employés de la poste britannique condamnés à tort à cause d’un logiciel défectueux - Next

En droit anglais et gallois, les ordinateurs sont considérés comme « fiables », sauf preuve du contraire, souligne The Guardian, ce qui « renverse la charge de la preuve normalement appliquée dans les affaires pénales ». Euh, ok !

via Shaarli le 15 janvier 2024

Mise en place et étude d'un Honey Pot SSH (Cowrie) | | Sécurité Informatique | IT-Connect (it-connect.fr) – wallabag

Article intéressant. C'est clairement dans la même démarche que mon article sur les phishing.

via Shaarli le 09 janvier 2024

Généré avec openring


Recettes de gourmands


Risotto classique

Vraiment très simple mais le résultat est succulent.

via cooking.pofilo.fr le 28 février 2024

Pain italien

via cooking.pofilo.fr le 17 février 2024

Cheese Naan

On ne les cuit pas sur la paroi d'un four traditionnel, mais ils sont tout de même délicieux !

via cooking.pofilo.fr le 20 janvier 2024

Généré avec openring