Git Environment

Par openshift · hypershift

Crée des environnements de développement avec les git worktrees, les branches, les commits et le push vers le dépôt distant. S'applique automatiquement pour les tâches de workflow git.

npx skills add https://github.com/openshift/hypershift --skill Git Environment

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és
  • fix/<description> - Corrections de bugs
  • docs/<description> - Documentation
  • refactor/<description> - Refactorisation de code
  • test/<description> - Ajouts de tests
  • chore/<description> - Tâches de maintenance

Committer les modifications

Toujours suivre la skill git-commit-format pour les commits.

  1. Indexer les modifications :

    git add <specific-files>
  2. Vérifier ce qui est indexé :

    git status
    git diff --cached
  3. 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
    )"
  4. 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-lease au lieu de --force pour 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 -v pour vérifier la configuration des remotes
  • Configurer votre remote fork dans dev/claude-env.sh en définissant GIT_FORK_REMOTE

Skills similaires