#!/bin/sh # Worktree pro Aufgabe: ./wt.sh neu | ./wt.sh weg | ./wt.sh liste # Demo-Projekt Kornblume-Shop (erfunden). Legt Branches als feature/ neben dem Repo unter ../-wt/ an. set -eu BASIS="$(git rev-parse --show-toplevel)" REPO="$(basename "$BASIS")" ZIEL="$(dirname "$BASIS")/${REPO}-wt" HAUPT="${WT_HAUPT:-main}" neu() { name="$1" case "$name" in *[!a-z0-9-]*|"") echo "Name nur aus a-z, 0-9 und Bindestrich" >&2; exit 2;; esac [ ! -e "$ZIEL/$name" ] || { echo "Worktree $name existiert schon" >&2; exit 3; } git -C "$BASIS" show-ref --verify --quiet "refs/heads/feature/$name" && { echo "Branch feature/$name existiert schon" >&2; exit 3; } mkdir -p "$ZIEL" git -C "$BASIS" worktree add -b "feature/$name" "$ZIEL/$name" "$HAUPT" echo "Bereit: $ZIEL/$name (Branch feature/$name, Start von $HAUPT)" } weg() { name="$1" [ -d "$ZIEL/$name" ] || { echo "Kein Worktree $name" >&2; exit 3; } if [ -n "$(git -C "$ZIEL/$name" status --porcelain)" ]; then echo "Ungesicherte Aenderungen in $name - erst committen oder verwerfen" >&2; exit 4; fi git -C "$BASIS" worktree remove "$ZIEL/$name" git -C "$BASIS" branch -d "feature/$name" || echo "Branch feature/$name nicht gemergt und bleibt erhalten" >&2 } case "${1:-}" in neu) neu "${2:-}";; weg) weg "${2:-}";; liste) git -C "$BASIS" worktree list;; *) echo "Aufruf: $0 neu|weg | liste" >&2; exit 2;; esac