git-who est un outil CLI qui permet d’identifier les responsables d’un composant complet ou d’un sous-système dans une base de code
- Contrairement à
git blame, git-who fonctionne à l’échelle de l’arborescence de fichiers pour identifier les auteurs du code
- Il propose trois sous-commandes, chacune offrant un angle différent sur la paternité dans un dépôt Git
-
table
- Par défaut, affiche un tableau récapitulatif des contributions de tous les auteurs ayant effectué des commits dans le dépôt
- Il est possible de spécifier un chemin afin de filtrer uniquement les commits concernant les fichiers de ce chemin
- Il est possible d’indiquer un nom de branche, un nom de tag ou un « commit-ish » afin de filtrer uniquement les commits accessibles depuis un commit donné
- Les drapeaux
-m, -c, -l, -f permettent de trier le tableau selon différentes métriques
-
tree
- Affiche l’arborescence des fichiers, chaque nœud indiquant l’auteur ayant le plus contribué à ce chemin
- Le drapeau
-a permet d’annoter tous les fichiers
- Prend en charge les drapeaux
-l, -f, -m, -c
-
hist
- Affiche un histogramme / une frise chronologique de l’activité des commits pour montrer l’historique des contributions au dépôt
- Prend en charge les drapeaux
-l et -f
- Options supplémentaires pour filtrer les commits
- Les options
--author et --nauthor permettent de spécifier les auteurs à inclure ou à exclure
- Les options
--since et --until permettent de filtrer les commits avant ou après une date donnée
- Cache : met en cache les données par dépôt dans
XDG_CACHE_HOME. Pour désactiver le cache, définissez GIT_WHO_DISABLE_CACHE=1
- Si le binaire
git-who est installé dans le PATH, il est possible d’exécuter git who sans configuration supplémentaire. S’il est installé sous un autre nom ou si une configuration explicite est souhaitée, un alias peut être ajouté dans la configuration Git
- Si un fichier
.mailmap est présent dans le dépôt Git, git who le respecte afin de regrouper les commits d’une même personne
-
Métriques
- Nombre de commits : indique le nombre de commits ayant modifié le chemin
- Nombre de fichiers : indique le nombre de fichiers uniques modifiés par l’auteur
- Lignes ajoutées et lignes supprimées : indiquent le nombre de lignes ajoutées ou supprimées sur le chemin
-
Différences avec git blame
git blame identifie, à partir du code de l’arborescence de travail, le commit qui a introduit chaque ligne, tandis que
git who parcourt une partie du journal des commits pour agréger les contributions
- Les deux outils opèrent à des niveaux différents et fournissent donc des informations différentes
1 commentaires
Avis Hacker News
À propos de l’analyse de « qui a écrit vim », selon le workflow, il peut sembler que les contributeurs internes aient davantage contribué
Cet outil est vraiment génial. Je l’ai essayé rapidement avant de finir la journée
Beaucoup de gens comprennent mal git blame. Il ne s’agit pas de savoir qui l’a fait, mais de déterminer quel commit en est la cause
On peut invoquer
git-whoavecgit who. Il suffit de définir un alias dans la configuration Git globalegit whatevercherchegit-whateverdans le chemin et l’exécuteJ’utilise une version low-tech avec l’alias « nerdwars » pour exécuter
git shortlog -ns --no-merges. C’est une bonne façon d’identifier les principaux contributeurs d’un projetGitlab/Github devraient ajouter une fonctionnalité qui envoie automatiquement un e-mail au dernier auteur des lignes de code modifiées lorsqu’une merge request est soumise
Cet outil est excellent. J’utilise une comptabilité basée sur git-blame pour suivre la quantité de code écrite par l’IA et par les humains à chaque release de l’application
tigest un excellent frontend TUI pour git, et il dispose d’une magnifique sous-commandetig blameCe qui manque dans git, ce n’est pas le nombre de lignes écrites ni le nombre de commits par développeur. C’est plutôt ceci
Certaines personnes commitent avec deux adresses e-mail différentes. Par exemple, elles utilisent une adresse sur leur ordinateur personnel et une autre sur leur ordinateur professionnel. Ce serait bien de pouvoir les définir comme identiques