Re: 1.5.6.5 fails to clone git.kernel.org/[...]/rostedt/linux-2.6-rt
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:45:53
Tim Shepard [off-list ref] writes:
I have git 1.5.6.5 installed from the Debian/lenny package.
Poking around in http://git.kernel.org/ looking for a git repository
that might have the latest -rt development happening, I found
http://git.kernel.org/?p=linux/kernel/git/rostedt/linux-2.6-rt.git
which looked promising.
But when I tried cloning it using:
git clone rsync://rsync.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-rt.git linux-2.6-rt
it pulled several hundred megabytes through my (rather slow) DSL line
and then printed out
error: Trying to write ref refs/tags/v2.6.11 with nonexistant object 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c
fatal: Cannot update the ref 'refs/tags/v2.6.11'.
and then removed everything it had just pulled.
Looking at http://git.kernel.org/?p=linux/kernel/git/rostedt/linux-2.6-rt.git;a=tags
I see that apparently v2.6.11 and v.2.6.11-tree both point at a tree
object and not a commit.
Is this a bug in git?It is not a problem for the tag pointing to a tree, but linux-2.6-rt.git tree uses (like everybody else) objects/alternates to borrow objects from the repository of Linus. I think we lost the alternate object store support when git-fetch was rewritten from the original shell script (that did support fetching from such a repository over rsync:// transport) to a reimplementation in C, with commit b888d61 (Make fetch a builtin, 2007-09-10). Later, cd547b4 (fetch/push: readd rsync support, 2007-10-01) attempted to resurrect some rsync support (b888d61 lost rsync support completely for git-fetch), but introduced these lines in transport.c: /* NEEDSWORK: handle one level of alternates */ result = run_command(&rsync); These have not been touched ever since, and then finally commit 8434c2f (Build in clone, 2008-04-27) killed support of cloning from a repository that uses alternates for rsync transport for git-clone (before that, the shell script version had a special case to still allow such operation over rsync). It appears practically nobody uses rsync:// transport anymore these days; you are unfortunately the first one who noticed it.