Re: Git shouldn't allow to push a new branch called HEAD
From: Daniele Segato <hidden>
Date: 2016-06-15 22:52:15
On Fri, 2011-10-14 at 13:31 +0200, Daniele Segato wrote:
Hi all, following from a discussion in IRC freenode #git between me, sitaram an shruggar step to reproduce: $ mkdir /tmp/gitbug $ cd /tmp/gitbug/ $ # create a fake remote repo $ git init --bare remote.git $ # clone it with the user that will generate the bug $ git clone remote.git buggenerator $ cd buggenerator/ $ touch whatever $ git add . $ git commit -m "first commit" $ git push origin master $ # now clone the same repo the other guy is the "victim" of this issue $ cd .. $ git clone remote.git victim $ # time to create the remote HEAD branch $ cd buggenerator/ $ git push origin HEAD:HEAD $ # the remote refs has been created! $ git ls-remote $ # another commit $ echo 'any change' >> whatever $ git commit -a -m "some change" $ git push origin master $ # the refs/heads/HEAD is still where it was $ git ls-remote $ # now from the victim perspective $ cd ../victim/ $ # every time executing a fetch he will get a force update $ # or maybe even an error, seen it my real repo, don't know how $ # to reproduce $ git fetch $ git fetch $ git ls-remote $ git fetch $ git ls-remote $ git branch -a
This should also help understanding what happen in the "victim" local repo at every fetch: mastro@mastroc3 /tmp/gitbug/victim (master) $ git br -av * master 11d0a12 [behind 1] first commit remotes/origin/HEAD -> origin/master remotes/origin/master 77852ef some change mastro@mastroc3 /tmp/gitbug/victim (master) $ git fetch From /tmp/gitbug/remote + 77852ef...11d0a12 HEAD -> origin/HEAD (forced update) mastro@mastroc3 /tmp/gitbug/victim (master) $ git br -av * master 11d0a12 first commit remotes/origin/HEAD -> origin/master remotes/origin/master 11d0a12 first commit regards, Daniele