Re: Git is not scalable with too many refs/*
- From
- Stephen Bash <bash@genarts.com>
- Date
- Jun 9, 2011, 15:42 UTC
- Message-ID
- <5313676.596.1307634150272.JavaMail.root@mail.hq.genarts.com>
- In-Reply-To
- <m38vtbdzjq.fsf@localhost.localdomain>
----- Original Message -----
Show 18 quoted lines
> From: "Jakub Narebski" <jnareb@gmail.com> > To: "NAKAMURA Takumi" <geek4civic@gmail.com> > Cc: "git" <git@vger.kernel.org> > Sent: Thursday, June 9, 2011 7:18:09 AM > Subject: Re: Git is not scalable with too many refs/* > NAKAMURA Takumi <geek4civic@gmail.com> writes: > > > Hello, Git. It is my 1st post here. > > > > I have tried tagging each commit as "refs/tags/rXXXXXX" on git-svn > > repo locally. (over 100k refs/tags.) > [...] > > That's insane. You would do much better to mark each commit with > note. Notes are designed to be scalable. See e.g. this thread > > [RFD] Proposal for git-svn: storing SVN metadata (git-svn-id) in notes > http://article.gmane.org/gmane.comp.version-control.git/174657
As a reformed SVN user (i.e. not using it anymore ;]) I agree that 100k tags seems crazy, but I was contemplating doing the exact same thing as Takumi. Skimming that thread, I didn't see the key point (IMO): notes can map from commits to a "name" (or other information), tags map from a "name" to commits.
I've seen two different workflows develop: 1) Hacking on some code in Git the programmer finds something wrong. Using Git tools he can pickaxe/bisect/etc. and find that the problem traces back to a commit imported from Subversion. 2) The programmer finds something wrong, asks coworker, coworker says "see bug XYZ", bug XYZ says "Fixed in r20356".
I agree notes is the right answer for (1), but for (2) you really want a cross reference table from Subversion rev number to Git commit.
In our office we created the cross reference table once by walking the Git tree and storing it as a file (we had some degenerate cases where one SVN rev mapped to multiple Git commits, but I don't remember the details), but it's not really usable from Git. Lightweight tags would be an awesome solution (if they worked). Perhaps a custom subcommand is a reasonable middle ground.
Thanks, Stephen