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

Re: Handling large files with GIT

From
Junio C Hamano <junkio@cox.net>
Date
Feb 15, 2006, 01:39 UTC
Message-ID
<7vslqlo0wo.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<43F27878.50701@vilain.net>
Sam Vilain <sam@vilain.net> writes:
> ...  Clearly, it needs to be out of the "tree".
OK.
>   2. forensic - extra stuff at the end of the commit object?

(except "extra at the end of commit", which does not make it out of the tree).

Show 9 quoted lines
>      eg
>         Copied: /new/path from /old/path:commit:c0bb171d..
>           (for SVN case where history matters)
>         Copied: /new/path from blob:b10b1d..
>           (for general pre-caching case)
>         Merged: /new/path from /old/path:commit:C0bb171d..
>           (for an SVK clone, so we know that subsequent merges on
>            /new/path need only merge from /old/path starting at commit
>            C0bb171d..)

I am not sure if recording the bare SVN ``copied'' is very useful. You would need to infer things from what SVN did to tell if the copy is a tree copy inside a project (e.g. cp -r i386 x86_64), tagging (e.g. svn-cp rHEAD trunk tags/v1.2), or branching, wouldn't you? SVK merge ticket is a bit more useful in that sense.

So far, git philosophy is to record things you _know_ about and defer such guesswork to the future, so limiting what you record to what you can actually see from the foreign SCM would be more in line with it. For the same reason, if you are talking about maildir managed under git, you should not have record anything other than what git already records: "we used to have these files, now we have these instead".

But I thought you were talking about caching what earlier inference declared what happened, so that you do not have to do the same inference every time. If that is the case, SVN level "Copied:" is probably not what you would want to record, I suspect. You would do some inference with the given information ("SVN says it copied this tree to that tree, what was it that it really wanted to do? Was it a copy, or was it to create a branch which was implemented as a copy?"), and record that, hoping that information would help your other operations this time and later.

So I think the order of questions you should be asking is:
   - what operations are you trying to help?
   - what information you would need to achieve those operations
     better?
   - among the second one, what will be necessary to be set in
     stone (IOW, cannot be computed later), and what are
     computable but expensive to recompute every time?
An example from an ancient thread.

With criss-cross merge between renamed trees, it was conjectured that recording renames detected earlier would help later merges. I think you should arrive at the list of "what we should record" by thinking things in this order:

 (1) currently criss-cross merge between renamed trees does not
     work well (realization of the status quo);
 (2) if we had this kind of information it would work better,
     here are the things we need to record when a new commit is
     made, and here is how to compute other information that can
     be inferred, and here is how to use that information to
     make the merge work better (solution without caching);
 (3) but it is expensive to recompute information we said
     computable in (2) if we were to do so every time.  Let's
     cache it.

I am getting an impression that you are doing only the first half of (2) without other parts, which somewhat bothers me.

Previous: Sam VilainNext: Sam Vilain
Message 20 of 39 in “Handling large files with GIT”
  1. Martin LanghoffFeb 8, 2006
  2. Johannes SchindelinFeb 8, 2006
  3. Linus TorvaldsFeb 8, 2006
  4. Linus TorvaldsFeb 8, 2006
  5. Junio C HamanoFeb 8, 2006
  6. Florian WeimerFeb 8, 2006
  7. Martin LanghoffFeb 8, 2006
  8. Ben CliffordFeb 13, 2006
  9. Linus TorvaldsFeb 13, 2006
  10. Linus TorvaldsFeb 13, 2006
  11. Linus TorvaldsFeb 13, 2006
  12. Ian MoltonFeb 13, 2006
  13. Martin LanghoffFeb 13, 2006
  14. Johannes SchindelinFeb 14, 2006
  15. Linus TorvaldsFeb 14, 2006
  16. Sam VilainFeb 14, 2006
  17. Linus TorvaldsFeb 14, 2006
  18. Junio C HamanoFeb 14, 2006
  19. Sam VilainFeb 15, 2006
  20. Junio C HamanoFeb 15, 2006
  21. Sam VilainFeb 15, 2006
  22. Martin LanghoffFeb 15, 2006
  23. Linus TorvaldsFeb 15, 2006
  24. Linus TorvaldsFeb 15, 2006
  25. Linus TorvaldsFeb 15, 2006
  26. Linus TorvaldsFeb 15, 2006
  27. Junio C HamanoFeb 15, 2006
  28. Linus TorvaldsFeb 15, 2006
  29. Linus TorvaldsFeb 15, 2006
  30. Linus TorvaldsFeb 16, 2006
  31. Junio C HamanoFeb 16, 2006
  32. Fredrik KuivinenFeb 16, 2006
  33. Jeff GarzikFeb 13, 2006
  34. Keith PackardFeb 13, 2006
  35. Martin LanghoffFeb 14, 2006
  36. Linus TorvaldsFeb 13, 2006
  37. Martin LanghoffFeb 13, 2006
  38. Greg KHFeb 9, 2006
  39. Martin LanghoffFeb 9, 2006

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.