Athena — mahmoud-consultancy/archive/old-docs/WORKTREE_STRATEGY.md

Git Worktrees Strategy voor Mahmoud Consultancy

Datum: 16 Oktober 2025 Current Branch: rename-to-glorylabs Purpose: Parallel werken aan meerdere features/issues tegelijk


Wat zijn Git Worktrees?

Git worktrees laten je meerdere branches tegelijk uitchecken in verschillende directories. Dit betekent dat je aan meerdere features/fixes kunt werken zonder constant te hoeven switchen tussen branches.

Voordelen:

  • ✅ Werk aan meerdere issues tegelijk (geen branch switching)
  • ✅ Test verschillende features naast elkaar
  • ✅ Geen merge conflicts tijdens development
  • ✅ Elk worktree heeft zijn eigen working directory
  • ✅ Alle worktrees delen dezelfde git history

Voorbeeld Situatie:

Main repo:           /mahmoud-consultancy (rename-to-glorylabs branch)
Worktree 1:          /mahmoud-consultancy-glorylabs-website (glorylabs-website branch)
Worktree 2:          /mahmoud-consultancy-interimplaza-kb (knowledge-base branch)
Worktree 3:          /mahmoud-consultancy-backend-api (backend-fixes branch)

Aanbevolen Worktree Structuur

Main Repository (blijft zoals het is):

/Users/sarkout/projects/prive/mahmoud-consultancy
├── Branch: rename-to-glorylabs
├── Focus: General updates, rebrand werk
└── Status: Je huidige werk met uncommitted backend changes

Worktree 1: GloryLabs Website

Location: /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs
├── Branch: feature/glorylabs-website (nieuw)
├── Focus: GloryLabs website deployment & polish
├── Files: website/glorylabs/*
└── Work: Deployment, testing, content updates

Worktree 2: InterimPlaza Platform (Angular/Spring Boot)

Location: /Users/sarkout/projects/prive/mahmoud-consultancy-platform
├── Branch: feature/interimplaza-sessions (of bestaande sessie branch)
├── Focus: InterimPlaza platform development (sessions 1-17)
├── Files: frontend/, backend/, cv-service/
└── Work: Sprint 4-5 sessies

Worktree 3: Backend Knowledge Base

Location: /Users/sarkout/projects/prive/mahmoud-consultancy-kb
├── Branch: feature/knowledge-base (nieuw)
├── Focus: Knowledge base backend & frontend
├── Files: backend/ (Article entities), frontend/ (KB components)
└── Work: Sessions 5-15 (KB development)

Worktree 4: Documentation & Planning

Location: /Users/sarkout/projects/prive/mahmoud-consultancy-docs
├── Branch: docs/updates (nieuw)
├── Focus: Documentation updates, planning docs
├── Files: *.md, docs/, 00-Dashboard/, etc.
└── Work: Documentation, session plans, reports

Setup Commando's

1. Commit of Stash Huidige Werk

Eerst moeten we de uncommitted changes opruimen:

# Optie A: Commit huidige werk
git add backend/
git commit -m "wip: article controller updates"

# Optie B: Stash voor later
git stash push -m "backend article updates"

# Optie C: Create worktree for current work
# (zie hieronder)

2. Create Worktrees

# Vanaf main directory
cd /Users/sarkout/projects/prive/mahmoud-consultancy

# Worktree 1: GloryLabs Website
git worktree add -b feature/glorylabs-website \
    ../mahmoud-consultancy-glorylabs \
    rename-to-glorylabs

# Worktree 2: InterimPlaza Platform
git worktree add -b feature/interimplaza-platform \
    ../mahmoud-consultancy-platform \
    rename-to-glorylabs

# Worktree 3: Knowledge Base
git worktree add -b feature/knowledge-base \
    ../mahmoud-consultancy-kb \
    rename-to-glorylabs

# Worktree 4: Documentation
git worktree add -b docs/updates \
    ../mahmoud-consultancy-docs \
    rename-to-glorylabs

3. Verifieer Worktrees

git worktree list

Output zal zijn:

/Users/sarkout/projects/prive/mahmoud-consultancy                    1989477 [rename-to-glorylabs]
/Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs         a1b2c3d [feature/glorylabs-website]
/Users/sarkout/projects/prive/mahmoud-consultancy-platform          a1b2c3d [feature/interimplaza-platform]
/Users/sarkout/projects/prive/mahmoud-consultancy-kb                a1b2c3d [feature/knowledge-base]
/Users/sarkout/projects/prive/mahmoud-consultancy-docs              a1b2c3d [docs/updates]

Workflow per Worktree

GloryLabs Website Worktree:

cd /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs

# Werk aan website
cd website/glorylabs
# Edit files, test, etc.

# Commit changes
git add website/glorylabs/
git commit -m "feat: update GloryLabs website with AI section"

# Push naar remote
git push origin feature/glorylabs-website

InterimPlaza Platform Worktree:

cd /Users/sarkout/projects/prive/mahmoud-consultancy-platform

# Werk aan platform
./run-sessions-auto.sh  # Run session scripts

# Commit changes
git add frontend/ backend/
git commit -m "feat: complete session 4 - admin navigation"

# Push
git push origin feature/interimplaza-platform

Knowledge Base Worktree:

cd /Users/sarkout/projects/prive/mahmoud-consultancy-kb

# Werk aan KB
cd backend/
# Create entities, services, controllers

# Commit
git add backend/src/main/java/nl/glorylabs/
git commit -m "feat: add Article entity and repository"

# Push
git push origin feature/knowledge-base

Switching Between Worktrees

Geen git checkout nodig! Gewoon cd naar de worktree:

# Werk aan GloryLabs website
cd /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs

# Switch naar InterimPlaza platform
cd /Users/sarkout/projects/prive/mahmoud-consultancy-platform

# Switch naar KB development
cd /Users/sarkout/projects/prive/mahmoud-consultancy-kb

# Back to main repo
cd /Users/sarkout/projects/prive/mahmoud-consultancy

Elk directory is een complete git repo met zijn eigen branch!


Merging Strategy

Wanneer Features Klaar Zijn:

# Ga naar main repo
cd /Users/sarkout/projects/prive/mahmoud-consultancy

# Update main branch
git checkout main
git pull origin main

# Merge feature branch
git merge feature/glorylabs-website
git push origin main

# Of maak PR via GitHub
gh pr create --base main --head feature/glorylabs-website \
    --title "feat: GloryLabs website deployment" \
    --body "Complete GloryLabs website with all features"

Clean Merge Workflow:

  1. Feature branch is up-to-date met rename-to-glorylabs
  2. Test alles in worktree
  3. Commit en push feature branch
  4. Create PR naar main (of merge direct)
  5. Delete worktree na merge

Worktree Management Commando's

List All Worktrees:

git worktree list

Remove a Worktree:

# Remove worktree directory
rm -rf /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs

# Clean up git references
git worktree prune

# Or use remove command
git worktree remove ../mahmoud-consultancy-glorylabs

Move/Repair Worktree:

# If you moved a worktree directory
git worktree repair

Lock Worktree (prevent accidental removal):

git worktree lock ../mahmoud-consultancy-platform --reason "Active development"

Recommended Setup voor Jouw Project

Scenario 1: Parallel Development (Recommended)

# Main repo: Blijft voor algemeen werk
cd /Users/sarkout/projects/prive/mahmoud-consultancy
# Branch: rename-to-glorylabs
# Use for: General updates, small fixes

# Worktree 1: GloryLabs Website
git worktree add -b glorylabs-website \
    ../mahmoud-consultancy-glorylabs \
    rename-to-glorylabs
# Use for: GloryLabs website deployment & updates

# Worktree 2: InterimPlaza Sessions
git worktree add -b interimplaza-sessions \
    ../mahmoud-consultancy-sessions \
    rename-to-glorylabs
# Use for: Running the 17 InterimPlaza sessions

# Worktree 3: Website Polish (both sites)
git worktree add -b website-polish \
    ../mahmoud-consultancy-websites \
    rename-to-glorylabs
# Use for: Both GloryLabs AND InterimPlaza website work

Scenario 2: Per Component (Alternative)

# Worktree per component/feature:

# Backend only
git worktree add -b backend-api ../mahmoud-consultancy-backend rename-to-glorylabs

# Frontend only
git worktree add -b frontend-ui ../mahmoud-consultancy-frontend rename-to-glorylabs

# Websites only
git worktree add -b websites ../mahmoud-consultancy-sites rename-to-glorylabs

# DevOps/Infrastructure
git worktree add -b devops ../mahmoud-consultancy-infra rename-to-glorylabs

Best Practices

DO:

  • ✅ Use descriptive branch names (feature/glorylabs-website, fix/backend-api)
  • ✅ Commit regelmatig in elk worktree
  • ✅ Push naar remote om werk te backuppen
  • ✅ Keep worktrees focused op specific features
  • ✅ Clean up worktrees na merge

DON'T:

  • ❌ Checkout dezelfde branch in meerdere worktrees
  • ❌ Forget to commit voor switching worktrees
  • ❌ Leave uncommitted changes (causes confusion)
  • ❌ Delete worktree directory manually (use git worktree remove)

IDE/Editor Setup

VS Code (Multiple Windows):

# Open elk worktree in apart window
code /Users/sarkout/projects/prive/mahmoud-consultancy
code /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs
code /Users/sarkout/projects/prive/mahmoud-consultancy-platform

Elke VS Code window heeft:

  • Eigen terminal
  • Eigen git status
  • Eigen file watcher
  • Geen conflicts!

IntelliJ/WebStorm (Multiple Projects):

  • Open elk worktree als apart project
  • IntelliJ detecteert automatisch dat het dezelfde git repo is
  • Shared settings maar eigen working directory

Cleanup After Merge

Wanneer feature branch is gemerged:

# Remove worktree
git worktree remove ../mahmoud-consultancy-glorylabs

# Delete branch (local)
git branch -d feature/glorylabs-website

# Delete branch (remote)
git push origin --delete feature/glorylabs-website

# Prune references
git worktree prune

Troubleshooting

Error: "branch is already checked out"

# Je probeert een branch te checken die al in een worktree is
# Oplossing: Use een andere branch of remove de existing worktree eerst

git worktree list  # See where branch is checked out
git worktree remove <path>  # Remove if needed

Error: "Cannot remove non-empty directory"

# Worktree has uncommitted changes
# Oplossing: Commit or stash first

cd <worktree-path>
git add .
git commit -m "wip: save work"
# Or
git stash

Worktree is Out of Sync

cd <worktree-path>
git fetch origin
git pull origin <branch-name>

Quick Setup Script

Ik maak een script om worktrees makkelijk op te zetten:

#!/bin/bash
# setup-worktrees.sh

MAIN_DIR="/Users/sarkout/projects/prive/mahmoud-consultancy"
BASE_BRANCH="rename-to-glorylabs"

cd "$MAIN_DIR"

echo "Setting up worktrees..."

# GloryLabs Website
if [ ! -d "../mahmoud-consultancy-glorylabs" ]; then
    git worktree add -b glorylabs-website \
        ../mahmoud-consultancy-glorylabs \
        $BASE_BRANCH
    echo "✓ GloryLabs worktree created"
else
    echo "✗ GloryLabs worktree already exists"
fi

# InterimPlaza Sessions
if [ ! -d "../mahmoud-consultancy-sessions" ]; then
    git worktree add -b interimplaza-sessions \
        ../mahmoud-consultancy-sessions \
        $BASE_BRANCH
    echo "✓ InterimPlaza worktree created"
else
    echo "✗ InterimPlaza worktree already exists"
fi

# Knowledge Base
if [ ! -d "../mahmoud-consultancy-kb" ]; then
    git worktree add -b knowledge-base \
        ../mahmoud-consultancy-kb \
        $BASE_BRANCH
    echo "✓ Knowledge Base worktree created"
else
    echo "✗ Knowledge Base worktree already exists"
fi

echo ""
echo "Worktrees setup complete!"
echo ""
git worktree list

Example Workflow

Morning: Start Multiple Tasks

# Terminal 1: Work on GloryLabs website
cd /Users/sarkout/projects/prive/mahmoud-consultancy-glorylabs
code .  # Open in VS Code
cd website/glorylabs
# Edit, test, commit

# Terminal 2: Run InterimPlaza session
cd /Users/sarkout/projects/prive/mahmoud-consultancy-sessions
./run-sessions-auto.sh
# Let it run while you work on website

# Terminal 3: Quick backend fix
cd /Users/sarkout/projects/prive/mahmoud-consultancy-kb
cd backend/
# Fix bug, commit

All running in parallel, no conflicts!

Evening: Merge Completed Work

cd /Users/sarkout/projects/prive/mahmoud-consultancy

# Merge website work
git merge glorylabs-website

# Merge platform work
git merge interimplaza-sessions

# Merge KB work
git merge knowledge-base

# Push everything
git push origin rename-to-glorylabs

Integration met Session Scripts

Voor InterimPlaza Sessions:

# Setup worktree voor sessions
git worktree add -b sessions-sprint4 \
    ../mahmoud-consultancy-sessions \
    rename-to-glorylabs

# Ga naar worktree
cd ../mahmoud-consultancy-sessions

# Run sessions
./run-sessions-auto.sh

# Sessions runnen in deze worktree terwijl je aan GloryLabs werkt in main repo!

Disk Space Considerations

Space Usage:

  • Main repo: ~500 MB (full codebase)
  • Each worktree: ~500 MB (duplicate working files)
  • Git objects: Shared (no duplication)

Total for 4 worktrees: ~2 GB

If Space is Limited:

  • Create worktrees only when needed
  • Remove after merging
  • Use sparse checkouts (advanced)

Commando Cheat Sheet

# List worktrees
git worktree list

# Add worktree
git worktree add <path> <branch>

# Add worktree with new branch
git worktree add -b <new-branch> <path> <base-branch>

# Remove worktree
git worktree remove <path>

# Prune deleted worktrees
git worktree prune

# Lock worktree
git worktree lock <path>

# Unlock worktree
git worktree unlock <path>

# Repair broken worktrees
git worktree repair

# Move to different worktree
cd <worktree-path>

Recommended Next Steps

For Your Current Situation:

  1. Commit uncommitted backend changes:

    git add backend/
    git commit -m "wip: article controller and entity updates"
    
  2. Create GloryLabs worktree:

    git worktree add -b glorylabs-website \
        ../mahmoud-consultancy-glorylabs \
        rename-to-glorylabs
    
  3. Create InterimPlaza sessions worktree:

    git worktree add -b interimplaza-sessions \
        ../mahmoud-consultancy-sessions \
        rename-to-glorylabs
    
  4. Work in parallel:

    • Terminal 1: GloryLabs deployment in worktree 1
    • Terminal 2: InterimPlaza sessions in worktree 2
    • Terminal 3: Main repo for quick fixes

Safety Tips

Before Removing Worktree:

cd <worktree-path>
git status  # Check for uncommitted changes
git log --oneline -5  # Check commits
git push  # Push to remote

Backup Strategy:

# All worktrees share git history
# Pushing any branch backs up that work
# Main repo .git/ has everything

# To backup: just push all branches
git push origin --all

Alternative: Lightweight Approach

Als je niet veel worktrees wilt:

# Just 2 worktrees:

# Main repo: GloryLabs website werk
# Worktree 1: InterimPlaza sessions
git worktree add -b sessions ../mahmoud-consultancy-sessions rename-to-glorylabs

This gives you:

  • Main repo voor GloryLabs website
  • Separate worktree voor lange InterimPlaza sessions
  • Simple, effective, minimal disk usage

Ready to setup? Run the commands above or use the setup script!

Reacties

Nog geen reacties