Workflow Git pour l'environnement de développement
Automatise les workflows git courants pour HyperShift, notamment la création de worktree, la création de branches, les commits (avec format approprié) et les envois vers des remotes.
Configuration
Charger les variables d'environnement depuis dev/claude-env.sh :
source dev/claude-env.sh
Variables d'environnement
| Variable | Défaut | Description |
|---|---|---|
GIT_FORK_REMOTE |
enxebre |
Nom de votre remote fork |
GIT_UPSTREAM_REMOTE |
origin |
Remote upstream (openshift/hypershift) |
GIT_BASE_BRANCH |
main |
Branche de base pour les nouvelles fonctionnalités |
Workflows
Créer un nouvel environnement de développement
Avec worktree (développement parallèle) :
# Récupérer les dernières modifications
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
# Créer un worktree avec une nouvelle branche
git worktree add -b <branch-name> <worktree-path> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
# Exemple :
git worktree add -b feat/privatelink-karpenter ../hs-privatelink $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
Sans worktree (même dépôt) :
# Récupérer les dernières modifications
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
# Créer et basculer vers une nouvelle branche
git checkout -b <branch-name> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
# Exemple :
git checkout -b fix/bug-123 $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
Conventions de nommage des branches
Utiliser des préfixes conventionnels :
feat/<description>- Nouvelles fonctionnalitésfix/<description>- Corrections de bugsdocs/<description>- Documentationrefactor/<description>- Refactorisation de codetest/<description>- Ajouts de testschore/<description>- Tâches de maintenance
Committer les modifications
Toujours suivre la skill git-commit-format pour les commits.
-
Indexer les modifications :
git add <specific-files> -
Vérifier ce qui est indexé :
git status git diff --cached -
Committer avec le bon format :
git commit -m "$(cat <<'EOF' <type>(<scope>): <description> [optional body] Signed-off-by: <name> <email> Commit-Message-Assisted-by: Claude (via Claude Code) EOF )" -
Valider le message de commit :
make run-gitlint
Envoyer vers un remote
Premier envoi (définir upstream) :
git push -u $GIT_FORK_REMOTE <branch-name>
Envois suivants :
git push
Force push (après rebase) :
# Toujours utiliser --force-with-lease pour plus de sécurité
git push --force-with-lease
Synchroniser avec upstream
# Récupérer les dernières modifications depuis upstream
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
# Rebase de la branche actuelle sur la branche de base
git rebase $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
# En cas de conflits, les résoudre, puis :
git rebase --continue
# Envoyer la branche mise à jour (force requise après rebase)
git push --force-with-lease
Nettoyer un worktree
# Supprimer le worktree
git worktree remove <worktree-path>
# Optionnellement, supprimer la branche
git branch -D <branch-name>
# Nettoyer les références de worktree obsolètes
git worktree prune
Lister les worktrees
git worktree list
Commandes de référence rapide
| Tâche | Commande |
|---|---|
| Nouveau worktree + branche | git worktree add -b <branch> <path> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH |
| Nouvelle branche (sans worktree) | git checkout -b <branch> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH |
| Indexer tous les changements | git add -A |
| Indexer des fichiers spécifiques | git add <file1> <file2> |
| Vérifier le statut | git status |
| Voir le diff indexé | git diff --cached |
| Committer | git commit -m "<message>" |
| Valider le commit | make run-gitlint |
| Envoyer (première fois) | git push -u $GIT_FORK_REMOTE <branch> |
| Envoyer | git push |
| Force push (sécurisé) | git push --force-with-lease |
| Synchroniser avec upstream | git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH && git rebase $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH |
| Supprimer un worktree | git worktree remove <path> |
| Supprimer une branche | git branch -D <branch> |
| Lister les worktrees | git worktree list |
Exemple de workflow complet
# 0. Charger l'environnement
source dev/claude-env.sh
# 1. Créer un nouvel environnement de fonctionnalité
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
git worktree add -b feat/aws-privatelink-subnets ../hs-privatelink $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
cd ../hs-privatelink
# 2. Effectuer les modifications...
# ... modifier les fichiers ...
# 3. Indexer et committer
git add -A
git commit -m "$(cat <<'EOF'
feat(aws): add dynamic subnet discovery for privatelink
Implement subnet discovery from Karpenter EC2NodeClass resources
to ensure PrivateLink VPC Endpoints have ENIs in all required
availability zones.
Signed-off-by: Alberto Garcia <agarcia@redhat.com>
Commit-Message-Assisted-by: Claude (via Claude Code)
EOF
)"
# 4. Valider
make run-gitlint
# 5. Envoyer vers le fork
git push -u $GIT_FORK_REMOTE feat/aws-privatelink-subnets
# 6. Créer une PR via gh cli
gh pr create --title "feat(aws): add dynamic subnet discovery for privatelink" --body "..."
# 7. Après la fusion de la PR, nettoyer
cd ../hypershift
git worktree remove ../hs-privatelink
git branch -D feat/aws-privatelink-subnets
Notes
- Toujours utiliser
--force-with-leaseau lieu de--forcepour plus de sécurité - Les worktrees permettent le développement parallèle sur plusieurs fonctionnalités
- Chaque worktree partage le même dépôt git mais a son propre répertoire de travail
- Exécuter
git remote -vpour vérifier la configuration des remotes - Configurer votre remote fork dans
dev/claude-env.shen définissantGIT_FORK_REMOTE