"git fetch -p" incorrectly deletes branches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello!
The command:
git fetch -p -v origin master:refs/heads/test

Deletes refs/heads/test every second time when run repeatedly:

$ git fetch -p -v origin master:refs/heads/test
>From https://github.com/git/git
 * [new branch]          master     -> test
 = [up to date]          master     -> origin/master
$ git fetch -p -v origin master:refs/heads/test
>From https://github.com/git/git
 - [deleted]             (none)     -> test
 = [up to date]          master     -> test
 = [up to date]          master     -> origin/master

(the command is the result of cutting down the test case,
so yes it is rather silly, but the issue appears in much
less obviously silly cases and causes a lot of confusion)
This is specific to the case of specifying the origin branch
without "full path" AND the right side with.
Wild-guess on cause: "master" is auto-expanded into both
"refs/tags/master" and "refs/heads/master" and instead of
fetching either/merging the result, both are fetched.
Combined with a time-of-check/time-of-use style race condition
on the code that checks if a ref is "up to date" on top of it,
it would result in this behaviour.
Also note that this behaviour appears also when fetch.prune=yes
is set in the config (instead of -p on the command-line),
which makes it much less obvious and there is no option to turn
of prune just for that command to work-around this.
I hope someone has the time to make sure nobody else has to
debug this ever again ;-)

Regards,
Reimar Döffinger



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]