git/list[1] front-page[2] threads[3] people[4] search[5] about
 

refs/original breaks git-clone for tags (was Re: Tags, Grafts, and Clones, oh my!)

From
SBStephen Bash <bash@genarts.com>
Date
Aug 20, 2010, 19:08 UTC
Message-ID
<32751199.117741.1282331329553.JavaMail.root@mail.hq.genarts.com>
In-Reply-To
<5054888.117464.1282315250235.JavaMail.root@mail.hq.genarts.com>
Show 18 quoted lines
> > Thanks for the testcase! Offhand, it definitely looks like a bug.
> > I'm
> > investigating to figure out which part of the chain is at fault.
> 
> No problem. I was very happily to isolate it outside the large repo I
> was working with...
> 
> Data from further testing:
> - doing a "normal" local clone doesn't emit the error
> - a remote clone over ssh does emit the error (so it's not just
> file:///)
> - in a brand new repo (init'ed, not cloned) 'git fetch ../foo
> refs/tags/tagFoo:refs/tags/tagFoo' fails:
> error: unable to find 28fffee... (sha of tag object)
> - in a brand new repo 'git fetch ../foo
> refs/heads/branchFoo:ref/heads/branchFoo' succeeds, and correctly
> fetches tagFoo (where branchFoo is created via 'git checkout -b
> branchFoo tagFoo')
After a lot of guess and check, it appears the issue is somehow related to the refs/original directory created by filter-branch.  If that directory is moved out of refs/ or deleted the clone succeeds.  Digging further, a simple rename of refs/original/refs/tags/tagFoo to anything else also fixes the problem.
A simplified test case is:

git init foo cd foo echo A >> foo.txt git add foo.txt git commit -m "Created foo" git tag -am "Tagging foo" tagFoo git filter-branch --env-filter 'export GIT_AUTHOR_NAME=xyz123' --tag-name-filter cat -- --all cd .. git clone file:///`pwd`/foo newFoo

git clone will "succeed" (exit 0), but throw the error 
   error: refs/tags/tagFoo does not point to a valid object!
and the tagFoo will not exist in the new repo.
(The env-filter is arbitrary, just need something that will force a commit rewrite)  For this bug to occur, the filter-branch must create refs/original/refs/tags/tagFoo, so if the filter-branch command is 
git filter-branch --env-filter 'export GIT_AUTHOR_NAME=xyz123' --tag-name-filter cat master
filter-branch will happily rewrite the tag, but won't create the offending file, so the clone will succeed without error (and the tag will exist in the new repo).  
Removing refs/original is a pretty trivial work-around, so I'm going to modify my scripts and continue working on my SVN transition.  Let me know if I can be of any assistance tracking down the actual bug.

Thanks, Stephen

Previous: Stephen BashNext: Jonathan Nieder
Message 6 of 7 in “Tags, Grafts, and Clones, oh my!”
  1. Stephen BashAug 20, 2010
  2. Ramkumar RamachandraAug 20, 2010
  3. Stephen BashAug 20, 2010
  4. Ramkumar RamachandraAug 20, 2010
  5. Stephen BashAug 20, 2010
  6. refs/original breaks git-clone for tags (was Re: Tags, Grafts, and Clones, oh my!)Stephen Bash, Aug 20, 2010
  7. Jonathan NiederSep 7, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.