Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:05:34 +08:00
commit 7acb31970d
51 changed files with 11782 additions and 0 deletions

354
commands/commit-message.md Normal file
View File

@@ -0,0 +1,354 @@
## 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