355 lines
9.8 KiB
Markdown
355 lines
9.8 KiB
Markdown
## Message de commit
|
|
|
|
Génère des messages de commit à partir des modifications indexées (git diff --staged). Cette commande ne fait que créer des messages et les copie dans votre presse-papiers—elle n'exécute aucune commande git.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
/commit-message [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
- `--format <format>` : Choisir le format du message (conventional, gitmoji, angular)
|
|
- `--lang <language>` : Définir la langue explicitement (en, fr)
|
|
- `--breaking` : Inclure la détection de changements cassants
|
|
|
|
### Exemples de base
|
|
|
|
```bash
|
|
# Générer un message à partir des modifications indexées (langue auto-détectée)
|
|
# La suggestion principale est automatiquement copiée dans votre presse-papiers
|
|
/commit-message
|
|
|
|
# Spécifier la langue explicitement
|
|
/commit-message --lang fr
|
|
/commit-message --lang en
|
|
|
|
# Inclure la détection de changements cassants
|
|
/commit-message --breaking
|
|
```
|
|
|
|
### Prérequis
|
|
|
|
**Important** : Cette commande ne fonctionne qu'avec les modifications indexées. Exécutez d'abord `git add` pour indexer vos modifications.
|
|
|
|
```bash
|
|
# Si rien n'est indexé, vous verrez :
|
|
$ /commit-message
|
|
Aucune modification indexée trouvée. Veuillez d'abord exécuter git add.
|
|
```
|
|
|
|
### Fonctionnalité de presse-papiers automatique
|
|
|
|
La suggestion principale est copiée dans votre presse-papiers comme commande complète : `git commit -m "message"`. Il suffit de la coller et l'exécuter dans votre terminal.
|
|
|
|
**Notes d'implémentation** :
|
|
|
|
- Exécuter `pbcopy` dans un processus séparé de la sortie du message
|
|
- Utiliser `printf` au lieu de `echo` pour éviter les sauts de ligne indésirables
|
|
|
|
### Détection automatique des conventions de projet
|
|
|
|
**Important** : Si des conventions spécifiques au projet existent, elles ont la priorité.
|
|
|
|
#### 1. Vérification de la configuration CommitLint
|
|
|
|
Détecte automatiquement les paramètres des fichiers suivants :
|
|
|
|
- `commitlint.config.js`
|
|
- `commitlint.config.mjs`
|
|
- `commitlint.config.cjs`
|
|
- `commitlint.config.ts`
|
|
- `.commitlintrc.js`
|
|
- `.commitlintrc.json`
|
|
- `.commitlintrc.yml`
|
|
- `.commitlintrc.yaml`
|
|
- `package.json` avec section `commitlint`
|
|
|
|
```bash
|
|
# Rechercher les fichiers de configuration
|
|
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
|
|
```
|
|
|
|
#### 2. Détection de types personnalisés
|
|
|
|
Exemple de types spécifiques au projet :
|
|
|
|
```javascript
|
|
// commitlint.config.mjs
|
|
export default {
|
|
extends: ["@commitlint/config-conventional"],
|
|
rules: {
|
|
"type-enum": [
|
|
2,
|
|
"always",
|
|
[
|
|
"feat",
|
|
"fix",
|
|
"docs",
|
|
"style",
|
|
"refactor",
|
|
"test",
|
|
"chore",
|
|
"wip", // travail en cours
|
|
"hotfix", // correction urgente
|
|
"release", // version
|
|
"deps", // mise à jour de dépendance
|
|
"config", // changement de configuration
|
|
],
|
|
],
|
|
},
|
|
};
|
|
```
|
|
|
|
#### 3. Détection des paramètres de langue
|
|
|
|
```javascript
|
|
// Quand le projet utilise des messages français
|
|
export default {
|
|
rules: {
|
|
"subject-case": [0], // Désactivé pour le support français
|
|
"subject-max-length": [2, "always", 72], // Limite de caractères ajustée pour le français
|
|
},
|
|
};
|
|
```
|
|
|
|
#### 4. Analyse de l'historique des commits existants
|
|
|
|
```bash
|
|
# Apprendre les modèles des commits récents
|
|
git log --oneline -50 --pretty=format:"%s"
|
|
|
|
# Statistiques d'utilisation des types
|
|
git log --oneline -100 --pretty=format:"%s" | \
|
|
grep -oE '^[a-z]+(\([^)]+\))?' | \
|
|
sort | uniq -c | sort -nr
|
|
```
|
|
|
|
### Détection automatique de la langue
|
|
|
|
Bascule automatiquement entre français/anglais basé sur :
|
|
|
|
1. **Configuration CommitLint** paramètres de langue
|
|
2. **Analyse git log** détection automatique
|
|
3. **Fichier de projet** paramètres de langue
|
|
4. **Fichier modifié** analyse des commentaires et chaînes
|
|
|
|
Par défaut c'est l'anglais. Génère en français si détecté comme projet français.
|
|
|
|
### Format de message
|
|
|
|
#### Commits conventionnels (Par défaut)
|
|
|
|
```text
|
|
<type>: <description>
|
|
```
|
|
|
|
**Important** : Génère toujours des messages de commit sur une seule ligne. Ne génère pas de messages multi-lignes.
|
|
|
|
**Note** : Les conventions spécifiques au projet ont la priorité si elles existent.
|
|
|
|
### Types standards
|
|
|
|
**Types requis** :
|
|
|
|
- `feat` : Nouvelle fonctionnalité (ajout de fonctionnalité visible pour l'utilisateur)
|
|
- `fix` : Correction de bug
|
|
|
|
**Types optionnels** :
|
|
|
|
- `build` : Changements du système de build ou dépendances externes
|
|
- `chore` : Autres changements (aucun impact sur la version)
|
|
- `ci` : Changements des fichiers de configuration et scripts CI
|
|
- `docs` : Changements de documentation uniquement
|
|
- `style` : Changements qui n'affectent pas la signification du code (espaces, formatage, points-virgules, etc.)
|
|
- `refactor` : Changements de code sans corrections de bugs ni ajouts de fonctionnalités
|
|
- `perf` : Améliorations de performances
|
|
- `test` : Ajout ou correction de tests
|
|
|
|
### Exemple de sortie (Projet anglais)
|
|
|
|
```bash
|
|
$ /commit-message
|
|
|
|
📝 Suggestions de message de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidat principal :
|
|
feat: implement JWT-based authentication system
|
|
|
|
📋 Alternatives :
|
|
1. feat: add user authentication with JWT tokens
|
|
2. fix: resolve token validation error in auth middleware
|
|
3. refactor: extract auth logic into separate module
|
|
|
|
✅ `git commit -m "feat: implement JWT-based authentication system"` copié dans le presse-papiers
|
|
```
|
|
|
|
**Exemple d'implémentation (Corrigé)** :
|
|
|
|
```bash
|
|
# Copier d'abord la commande commit dans le presse-papiers (pas de saut de ligne)
|
|
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy
|
|
|
|
# Puis afficher le message
|
|
cat << EOF
|
|
📝 Suggestions de message de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidat principal :
|
|
$COMMIT_MESSAGE
|
|
|
|
📋 Alternatives :
|
|
1. ...
|
|
2. ...
|
|
3. ...
|
|
|
|
✅ \`git commit -m "$COMMIT_MESSAGE"\` copié dans le presse-papiers
|
|
EOF
|
|
```
|
|
|
|
### Exemple de sortie (Projet français)
|
|
|
|
```bash
|
|
$ /commit-message
|
|
|
|
📝 Suggestions de message de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidat principal :
|
|
feat: système d'authentification JWT implémenté
|
|
|
|
📋 Alternatives :
|
|
1. feat: ajouter authentification utilisateur avec tokens JWT
|
|
2. fix: résoudre erreur de validation de token dans middleware auth
|
|
3. docs: séparer logique auth dans module différent
|
|
|
|
✅ `git commit -m "feat: système d'authentification JWT implémenté"` copié dans le presse-papiers
|
|
```
|
|
|
|
### Vue d'ensemble du fonctionnement
|
|
|
|
1. **Analyse** : Analyser le contenu de `git diff --staged`
|
|
2. **Génération** : Générer un message de commit approprié
|
|
3. **Copie** : Copier automatiquement le candidat principal dans le presse-papiers
|
|
|
|
**Note** : Cette commande n'exécute pas git add ou git commit. Elle ne fait que générer des messages de commit et les copie dans le presse-papiers.
|
|
|
|
### Fonctionnalités intelligentes
|
|
|
|
#### 1. Classification automatique des changements (Fichiers indexés uniquement)
|
|
|
|
- Ajout de nouveau fichier → `feat`
|
|
- Modèles de correction d'erreur → `fix`
|
|
- Fichiers de test uniquement → `test`
|
|
- Changements de fichiers de configuration → `chore`
|
|
- Mises à jour README/docs → `docs`
|
|
|
|
#### 2. Détection automatique des conventions de projet
|
|
|
|
- Fichier `.gitmessage`
|
|
- Conventions dans `CONTRIBUTING.md`
|
|
- Modèles d'historique de commits passés
|
|
|
|
#### 3. Détails de détection de langue (Modifications indexées uniquement)
|
|
|
|
```bash
|
|
# Critères de détection (ordre de priorité)
|
|
1. Détecter la langue à partir du contenu git diff --staged
|
|
2. Analyse des commentaires des fichiers indexés
|
|
3. Analyse de langue de git log --oneline -20
|
|
4. Paramètres de langue principale du projet
|
|
```
|
|
|
|
#### 4. Détails de l'analyse d'indexation
|
|
|
|
Informations utilisées pour l'analyse (lecture seule) :
|
|
|
|
- `git diff --staged --name-only` - Liste des fichiers modifiés
|
|
- `git diff --staged` - Contenu réel des changements
|
|
- `git status --porcelain` - Statut des fichiers
|
|
|
|
### Détection de changements cassants
|
|
|
|
Pour les changements d'API cassants :
|
|
|
|
**Français** :
|
|
|
|
```bash
|
|
feat!: changer format de réponse API utilisateur
|
|
|
|
BREAKING CHANGE: la réponse utilisateur inclut maintenant des métadonnées supplémentaires
|
|
```
|
|
|
|
Ou :
|
|
|
|
```bash
|
|
feat(api)!: changer flux d'authentification
|
|
```
|
|
|
|
**Anglais** :
|
|
|
|
```bash
|
|
feat!: change user API response format
|
|
|
|
BREAKING CHANGE: user response now includes additional metadata
|
|
```
|
|
|
|
Ou :
|
|
|
|
```bash
|
|
feat(api)!: change authentication flow
|
|
```
|
|
|
|
### Meilleures pratiques
|
|
|
|
1. **Correspondre au projet** : Suivre la langue de commit existante
|
|
2. **Concision** : Clair en moins de 50 caractères
|
|
3. **Cohérence** : Ne pas mélanger les langues (rester cohérent en français)
|
|
4. **OSS** : Anglais recommandé pour l'open source
|
|
5. **Ligne unique** : Toujours message de commit sur une ligne (compléter avec PR pour explications détaillées)
|
|
|
|
### Modèles communs
|
|
|
|
**Français** :
|
|
|
|
```text
|
|
feat: ajouter endpoint d'inscription utilisateur
|
|
fix: résoudre fuite mémoire dans gestionnaire cache
|
|
docs: mettre à jour documentation API
|
|
```
|
|
|
|
**Anglais** :
|
|
|
|
```text
|
|
feat: add user registration endpoint
|
|
fix: resolve memory leak in cache manager
|
|
docs: update API documentation
|
|
```
|
|
|
|
### Intégration avec Claude
|
|
|
|
```bash
|
|
# Utiliser avec les modifications indexées
|
|
git add -p # Indexation interactive
|
|
/commit-message
|
|
"Générer message de commit optimal"
|
|
|
|
# Indexer et analyser des fichiers spécifiques
|
|
git add src/auth/*.js
|
|
/commit-message --lang fr
|
|
"Générer message pour changements d'authentification"
|
|
|
|
# Détection et gestion de changement cassant
|
|
git add -A
|
|
/commit-message --breaking
|
|
"Marquer appropriément s'il y a des changements cassants"
|
|
```
|
|
|
|
### Notes importantes
|
|
|
|
- **Prérequis** : Les modifications doivent être indexées avec `git add` au préalable
|
|
- **Limitation** : Les modifications non indexées ne sont pas analysées
|
|
- **Recommandation** : Vérifier d'abord les conventions de commit du projet existant
|