Install hooks by copying into .git/hooks instead of core.hooksPath
Linking core.hooksPath to the tracked, sandbox-writable .githooks/ let a sandboxed command rewrite a hook that git commit/push then run unsandboxed. Copies in .git/hooks can't be changed from the sandbox. This also keeps existing .git/hooks scripts working and lets npm install succeed outside a git checkout. pre-merge-commit now names itself in errors; hook tests clean up, ignore GIT_* env and cover the installer; docs state what each layer does and doesn't stop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8b08c7b27a
commit
24541f0602
7 files changed
+72
-20
No files matched your search
@@ -1,7 +1,10 @@
|
||||
#!/bin/sh
|
||||
# Refuse commits (and, via pre-merge-commit, merge commits) while main is checked out.
|
||||
# Cherry-pick, revert and fast-forward merges don't run these hooks; pre-push still stops
|
||||
# their result from reaching the remote.
|
||||
name=${1:-pre-commit}
|
||||
if [ "$(git symbolic-ref --short -q HEAD)" = "main" ]; then
|
||||
echo "$(basename "$0"): committing on main is not allowed; create a branch first." >&2
|
||||
echo "$name: committing on main is not allowed; create a branch first." >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
@@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
exec "$(dirname "$0")/pre-commit"
|
||||
exec sh "$(dirname "$0")/pre-commit" pre-merge-commit
|
||||
Reference in new issue
Block a user