| name | devops:worktree |
| description | Gestion des git worktrees pour développement parallèle (création, liste, suppression, statut, switch) |
| model | sonnet |
| allowed-tools | ["Bash","Read","Write","Edit","Grep","AskUserQuestion"] |
| argument-hint | <action> [args] | [source-branch] <issue-number-or-text> |
| version | 1.0.0 |
| license | MIT |
| hooks | {"PreToolUse":[{"matcher":"Bash(git worktree add:*)","hooks":[{"type":"command","command":"# Hook 1: Bloquer si modifications non commitées\nif ! git diff --quiet || ! git diff --cached --quiet; then\n echo \"ERREUR : Modifications non commitées détectées\"\n echo \"\"\n echo \"Fichiers modifiés :\"\n git status --short\n echo \"\"\n echo \"Vous devez commit ou stash avant de créer un worktree\"\n exit 1\nfi\n","once":true}]}],"PostToolUse":[{"matcher":"Bash(git worktree add:*)","hooks":[{"type":"command","command":"# Hook 2: Feedback création\necho \"Worktree créé avec succès\"\n","once":false}]}]} |
Gestion des git worktrees
Créer et gérer des worktrees Git pour le développement parallèle.
Configuration
CORE_SCRIPTS="${CLAUDE_PLUGIN_ROOT}/scripts"
Actions disponibles
create (mode Git structuré)
Créer un nouveau worktree avec résolution de branche depuis une issue GitHub ou un texte.
Usage :
/devops:worktree [source-branch] <issue-number-or-text>
Comportement :
- Lire
WORKTREE_DIR et MAIN_BRANCH depuis .env.claude
- Parser les arguments (même logique que
devops:branch)
- Valider SOURCE_BRANCH avec
validate-source-branch.sh
- Mettre à jour via
git fetch origin $SOURCE_BRANCH
- Résoudre le nom de branche via
resolve-branch-name.sh
- Vérifier que la branche n'existe pas via
check-branch-exists.sh
- Calculer le chemin :
$WORKTREE_DIR/$WORKTREE_DIRNAME
- Créer :
git worktree add "$WORKTREE_PATH" -b "$BRANCH_NAME" "origin/$SOURCE_BRANCH"
- Afficher résumé avec
cd $WORKTREE_PATH
list
Lister tous les worktrees actifs.
Usage :
/devops:worktree list
Comportement :
git worktree list
remove
Supprimer un worktree (après merge ou abandon).
Usage :
/devops:worktree remove <feature-name>
Comportement :
- Vérifier qu'il n'y a pas de modifications non commitées
- Demander confirmation si des commits non poussés existent
- Supprimer le worktree avec
git worktree remove
- Optionnellement supprimer la branche (demander confirmation)
- Mettre à jour
.claude/data/.dev-worktrees.json si présent
status
Afficher le statut détaillé d'un ou tous les worktrees.
Usage :
/devops:worktree status [feature-name]
switch
Afficher les commandes pour basculer vers un worktree existant.
Usage :
/devops:worktree switch <feature-name>
Variables (mode create)
- SOURCE_BRANCH: Branche source (optionnel - défaut: MAIN_BRANCH de .env.claude)
- ISSUE_OR_TEXT: Numéro d'issue GitHub ou texte descriptif
Relevant Files
- @.git/config
- @.gitignore
- @.env.claude
Instructions à Exécuter (mode create)
IMPORTANT : Exécute ce workflow étape par étape :
1. Lire la configuration depuis .env.claude
2. Parser les arguments et résoudre SOURCE_BRANCH
2 arguments : Premier = SOURCE_BRANCH, Second = ISSUE_OR_TEXT
1 argument :
- Entier -> ISSUE_OR_TEXT, SOURCE_BRANCH = MAIN_BRANCH
- Branche locale existante -> SOURCE_BRANCH, ISSUE_OR_TEXT demandé
- Texte -> ISSUE_OR_TEXT, SOURCE_BRANCH = MAIN_BRANCH
0 argument : SOURCE_BRANCH = MAIN_BRANCH, ISSUE_OR_TEXT demandé
3. Valider SOURCE_BRANCH
bash "$CORE_SCRIPTS/validate-source-branch.sh" "$SOURCE_BRANCH"
4. Mettre à jour SOURCE_BRANCH (fetch)
git fetch origin $SOURCE_BRANCH
Note : On utilise fetch au lieu de checkout + pull pour ne pas changer la branche courante.
5. Résoudre le nom de branche
eval "$(bash "$CORE_SCRIPTS/resolve-branch-name.sh" "$ISSUE_OR_TEXT")"
echo "BRANCH_NAME=$BRANCH_NAME"
echo "WORKTREE_DIRNAME=$WORKTREE_DIRNAME"
6. Vérifier que la branche n'existe pas
bash "$CORE_SCRIPTS/check-branch-exists.sh" "$BRANCH_NAME"
7. Calculer le chemin du worktree
- Chemin complet :
$WORKTREE_DIR/$WORKTREE_DIRNAME
8. Vérifier que le répertoire n'existe pas déjà
test -d "$WORKTREE_PATH"
- Si existe -> erreur et arrêt
9. Créer le worktree
git worktree add "$WORKTREE_PATH" -b "$BRANCH_NAME" "origin/$SOURCE_BRANCH"
10. Afficher le résumé
Worktree créé : $BRANCH_NAME
Répertoire : $WORKTREE_PATH
Préfixe détecté : $PREFIX (source: $PREFIX_SOURCE)
Depuis : $SOURCE_BRANCH
{Si issue} Issue associée : #$ISSUE_NUMBER
Pour travailler dans ce worktree :
cd $WORKTREE_PATH
Le tracking sera configuré automatiquement au premier push avec :
git push -u origin $BRANCH_NAME
IMPORTANT - NE PAS configurer de tracking automatiquement
Règles de nommage
- Features :
feature/<name> -> worktree dans $WORKTREE_DIR/feature-<name>
- Hotfixes :
hotfix/<name> -> worktree dans $WORKTREE_DIR/hotfix-<name>
- Remplacer
/ par - dans le nom de branche pour le répertoire
- Exemple :
feature/42-login-fix -> feature-42-login-fix
Examples
/devops:worktree 123
/devops:worktree "user authentication"
/devops:worktree develop 123
/devops:worktree list
/devops:worktree remove feature-auth
/devops:worktree status
Validation
- WORKTREE_DIR doit être défini dans
.env.claude (ou demandé)
- Le répertoire parent de WORKTREE_DIR doit exister
- SOURCE_BRANCH doit exister localement
- FETCH pour mettre à jour SOURCE_BRANCH (CRITIQUE)
- La nouvelle branche ne doit pas déjà exister
- Le répertoire worktree ne doit pas déjà exister