#!/bin/bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' # No Color gitdirs=$(find . -type d -name ".git") printf "\n${CYAN}šŸ“Š Multi-Repo Status Summary${NC}\n" printf "${YELLOW}%-35s │ %-13s │ %-11s │ %-8s${NC}\n" "Repository" "šŸ—‚ļø Uncommitted" "ā¬†ļø Unpushed" "āš ļø Behind" printf "%0.s─" {1..75}; printf "\n" total_uncommitted=0 total_ahead=0 total_behind=0 for gitdir in $gitdirs; do repo=$(dirname "$gitdir") cd "$repo" || continue uncommitted=$(git status --porcelain | wc -l | tr -d ' ') git remote update > /dev/null 2>&1 if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then ahead=$(git rev-list --count @{u}..HEAD 2>/dev/null) behind=$(git rev-list --count HEAD..@{u} 2>/dev/null) else ahead=0 behind=0 fi printf "%-35s │ %-13s │ %-11s │ %-8s\n" "$repo" "$uncommitted" "$ahead" "$behind" total_uncommitted=$((total_uncommitted + uncommitted)) total_ahead=$((total_ahead + ahead)) total_behind=$((total_behind + behind)) cd - > /dev/null || exit done printf "%0.s─" {1..75}; printf "\n" printf "${GREEN}🟢 Overall: ${NC}šŸ—‚ļø %d uncommitted file(s), ā¬†ļø %d unpushed commit(s), āš ļø %d behind remote\n" "$total_uncommitted" "$total_ahead" "$total_behind"