config options receive.<denyNonFastForward, denyDeletes> do not work in nonstandard ref namespaces. I stumbled over it in refs/notes/, but the problem is general. Or if it this intentional, it is the git-config(1) doc of these options which needs fixing.
Git version 1.7.4.2.
To reproduce:
######################################################################## #!/bin/sh rm -rf hi ho
git --version
# Create initial repos
git init -q hi
(cd hi
git config receive.denyDeletes true
git config receive.denyNonFastForwards true
echo foo > foo && git add foo && git commit -q -m first foo)
git clone -q hi ho# Make them diverge, except the checked-out branch
for r in hi ho; do
(cd $r
echo $r >> foo && git commit -q -m next foo
git update-ref refs/outside/test HEAD
git checkout -q -b br HEAD^
# Shut up a bit
git config advice.pushNonFastForward false
git gc --quiet
# For ssh push
git update-server-info)
donecd ho # Optional; makes no difference #git config remote.origin.pushurl localhost:`pwd`/../hi
# Can push test despite 'deny's, fails as expeceted for master:
for b in refs/outside/test refs/heads/master; do
git push -f origin $b:$b
git push -f origin :$b
echo ""
done
# Just to check: Pushing the master normal way fails the same way.
git push -f origin######################################################################## Output:
git version 1.7.4.2 To /tmp/hi + 1bb5836...5bf63f8 refs/outside/test -> refs/outside/test (forced update) To /tmp/hi - [deleted] refs/outside/test
remote: error: denying non-fast-forward refs/heads/master (you should pull first) To /tmp/hi ! [remote rejected] master -> master (non-fast-forward) error: failed to push some refs to '/tmp/hi' remote: error: denying ref deletion for refs/heads/master To /tmp/hi ! [remote rejected] master (deletion prohibited) error: failed to push some refs to '/tmp/hi'
remote: error: denying non-fast-forward refs/heads/master (you should pull first) To /tmp/hi ! [remote rejected] master -> master (non-fast-forward) error: failed to push some refs to '/tmp/hi'
-- Hallvard