analyzing-git-sessions

Analyse les commits git et les modifications dans une plage temporelle ou une plage de commits, en fournissant des résumés structurés pour la revue de code, les rétrospectives, les journaux de travail ou la documentation de session.

npx skills add https://github.com/bitwarden/ai-plugins --skill analyzing-git-sessions

Analyse des sessions Git

Responsabilité centrale

Générer une analyse structurée de l'activité git pour une période ou une plage de commits spécifiée, incluant l'historique des commits, les changements de fichiers, les statistiques et des diffs optionnels.

Entrées

Accepter de l'utilisateur :

  • Plage temporelle : "last 2 hours", "since 10am", "today", "since 2025-10-23 14:00"
  • Plage de commits : "abc123..def456", "HEAD~5..HEAD", "feature-branch..main"
  • Filtres optionnels : Chemins spécifiques, auteurs ou types de fichiers
  • Profondeur de sortie : Concise (défaut), Détaillée ou format Code Review

Processus de travail

Étape 1 : Analyser et valider l'entrée

  1. Déterminer le type de plage :

    • Basée sur le temps : Parser le temps relatif ou absolu
    • Basée sur les commits : Valider que les références de commits existent
    • Basée sur les branches : Résoudre les noms de branches en commits
  2. Valider le repository git :

    git rev-parse --git-dir
  3. Vérifier que la plage contient des commits :

    git log <range> --oneline | head -1

    Si vide, informer l'utilisateur et quitter.

Étape 2 : Extraire l'historique des commits

# Obtenir tous les commits dans la plage
git log <range> --oneline --no-decorate

# Obtenir les infos détaillées des commits
git log <range> --format="%h|%an|%ar|%s" --no-decorate

# Compter les commits
git log <range> --oneline | wc -l

Stocker les données des commits pour le résumé.

Étape 3 : Générer les statistiques

Statistiques de changement globales :

# Stats résumées (insertions/suppressions par fichier)
git diff <start>..<end> --stat

# Stats numériques pour parsing
git diff <start>..<end> --numstat

# Compter les changements totaux
git diff <start>..<end> --shortstat

Répartition par auteur (si plusieurs auteurs) :

git shortlog <start>..<end> -sn

Catégorisation des fichiers :

  • Identifier les nouveaux fichiers (statut "A")
  • Identifier les fichiers supprimés (statut "D")
  • Identifier les fichiers renommés (statut "R")
  • Fichiers modifiés avec magnitude de changement

Étape 4 : Identifier les fichiers clés pour analyse détaillée

Règles de priorité :

  1. Changements importants (>100 lignes modifiées) : Toujours inclure
  2. Nouveaux fichiers : Inclure (surtout si >50 lignes)
  3. Fichiers supprimés : Noter mais ne pas diffuser
  4. Fichiers d'architecture : build.gradle.kts, AndroidManifest.xml, configs de modules
  5. Fichiers de test : Signaler séparément pour évaluation de couverture de test

Extraire la liste des fichiers clés :

# Fichiers modifiés avec comptage de lignes
git diff <start>..<end> --numstat | sort -rn -k1 -k2

Limiter aux 10 premiers fichiers par défaut pour éviter le débordement de contexte.

Étape 5 : Générer les diffs sélectifs (selon la profondeur)

Mode concis : Pas de diffs, statistiques uniquement

Mode détaillé : Diffs pour 3-5 fichiers clés

git diff <start>..<end> -- path/to/key/file.kt

Mode Code Review : Diffs pour tous les fichiers modifiés, groupés par module

# Grouper par répertoire
git diff <start>..<end> --name-only | cut -d'/' -f1-2 | sort -u

# Générer les diffs par module
for module in modules; do
  git diff <start>..<end> -- $module/
done

Protection contre le débordement de contexte :

  • Si >10 fichiers changés significativement, limiter aux 5 meilleurs diffs
  • Avertir l'utilisateur : "Showing top 5 files by change size. Request specific files for full diffs."

Étape 6 : Présenter le résumé structuré

Format selon la profondeur :

Résumé concis

## Git Session Summary

**Range**: <start-commit> to <end-commit> (<timeframe>)
**Commits**: X commits by Y author(s)
**Files Changed**: A modified, B added, C deleted
**Net Changes**: +X -Y lines

### Commits

- abc123 Commit message 1
- def456 Commit message 2
  ...

### Top Files Changed

1. path/to/file1.kt (+50 -20)
2. path/to/file2.kt (+30 -15)
   ...

Résumé détaillé

Inclut :

  • Liste complète des commits avec auteurs et timestamps
  • Liste complète des fichiers avec stats de changement
  • Répartition par auteur
  • Diffs pour 3-5 meilleurs fichiers pour relecture

Format Code Review

## Code Review Summary

### Overview

- **PR Title**: [Suggested from commit messages]
- **Changes**: X files across Y modules
- **Scope**: [Inferred from changed files]

### Commits

[Formatted commit list suitable for PR description]

### Changes by Module

**Module: app**

- file1.kt: Description of changes
- file2.kt: Description of changes

**Module: core**
...

### Key Changes

[Diffs for significant modifications]

### Test Coverage

- Test files modified: X
- New tests added: ~Y

Lignes directrices de sortie

Messages de commit

  • Afficher le hash court (7 caractères)
  • Afficher seulement la première ligne du message de commit
  • Tronquer les longs messages à 80 caractères
  • Grouper par auteur si plusieurs contributeurs

Chemins de fichiers

  • Utiliser les chemins relatifs depuis la racine du repo
  • Formater comme code : path/to/file.kt
  • Inclure la magnitude du changement de lignes : (+X -Y)
  • Mettre en évidence le type de fichier (source, test, config)

Statistiques

Présenter dans des tableaux clairs :

| Metric        | Count |
| ------------- | ----- |
| Commits       | 15    |
| Files Changed | 23    |
| Insertions    | +450  |
| Deletions     | -180  |

Diffs

  • Inclure le chemin du fichier comme en-tête : ### path/to/file.kt
  • Utiliser des blocs de code avec coloration syntaxique
  • Afficher les lignes de contexte (défaut git : 3 lignes avant/après)
  • Tronquer les diffs très volumineux (>200 lignes) avec résumé

Gestion du budget de contexte

Surveiller les tailles des diffs :

  • Petite session (<10 fichiers, <500 lignes) : Sûr pour le mode détaillé
  • Session moyenne (10-30 fichiers, 500-2000 lignes) : Utiliser des diffs sélectifs
  • Grande session (>30 fichiers, >2000 lignes) : Mode concis avec avertissements

Divulgation progressive :

  1. Toujours commencer avec un résumé concis
  2. Demander à l'utilisateur : "Would you like detailed diffs for specific files?"
  3. Générer les diffs sur demande plutôt qu'à l'avance

Secours pour les grandes sessions : "This session modified 45 files with 5000+ line changes. Showing concise summary. Request specific files or modules for detailed diffs."

Anti-patrons à éviter

À ne pas faire :

  • Générer des diffs pour tous les fichiers dans les grandes sessions (débordement de contexte)
  • Inclure les diffs complets sans demander (perte de contexte sur des détails non nécessaires)
  • Ignorer les types de fichiers (traiter les changements de test comme des changements de source)
  • Perdre le contexte de ce que l'utilisateur veut savoir
  • Utiliser des résumés génériques ("modified 10 files") sans spécificités

À faire :

  • Demander à l'utilisateur quel niveau de détail il souhaite
  • Prioriser les fichiers clés par magnitude de changement
  • Catégoriser les fichiers (source, test, config, docs)
  • Fournir des résumés actionnables
  • Proposer de détailler des fichiers spécifiques

Critères de succès

Une bonne analyse de session git devrait :

  1. Informer : L'utilisateur comprend la portée des changements en un coup d'œil
  2. Cibler : Met en avant les changements les plus significatifs en premier
  3. Être actionnelle : Fournit des chemins et des diffs pour une relecture plus approfondie
  4. Être efficace : Ne gaspille pas le contexte sur des détails inutiles
  5. S'adapter : Ajuste la profondeur selon la taille de la session et les besoins de l'utilisateur

Exemples de sortie

Voir contexts/example-outputs.md pour des exemples détaillés de résumés concis et de formats Code Review.

Skills similaires