This script installs a pre-push hook that prevents pushing commits when submodules have uncommitted changes, helping avoid accidental commits with dirty submodule states. The hook checks all submodules for uncommitted changes before allowing a push, protecting against pushing incomplete work that includes submodule modifications.
19 lines
687 B
Bash
Executable File
19 lines
687 B
Bash
Executable File
#!/bin/bash
|
|
# One-time setup for git hooks on this machine
|
|
echo "🔒 Installing pre-push safety hook to prevent pushing with uncommitted submodule changes..."
|
|
# Create pre-push hook
|
|
mkdir -p .git/hooks
|
|
cat >.git/hooks/pre-push <<'EOF'
|
|
#!/bin/bash
|
|
# Prevent pushing if submodules have uncommitted changes
|
|
uncommitted=$(git submodule foreach --quiet 'if [ "$(git status --porcelain)" != "" ]; then echo $name; fi')
|
|
if [ -n "$uncommitted" ]; then
|
|
echo "❌ ERROR: Submodules have uncommitted changes:"
|
|
echo "$uncommitted"
|
|
echo "Commit submodules first (or use git sc-commit)"
|
|
exit 1
|
|
fi
|
|
EOF
|
|
|
|
echo "✅ Git hooks installed! Submodule changes will be checked before pushing."
|