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

Re: What's so special about objects/17/ ?

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 8, 2018, 10:36 UTC
Message-ID
<87h8hwafof.fsf@evledraar.gmail.com>
In-Reply-To
<xmqqpnwltu8s.fsf@gitster-ct.c.googlers.com>
On Sun, Oct 07 2018, Junio C Hamano wrote:
Show 10 quoted lines
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>> 1. We still have this check of objects/17/ in builtin/gc.c today. Why
>>    objects/17/ and not e.g. objects/00/ to go with other 000* magic such
>>    as the 0000000000000000000000000000000000000000 SHA-1?d  Statistically
>>    it doesn't matter, but 17 seems like an odd thing to pick at random
>>    out of 00..ff, does it have any significance?
>
> There is no "other 000* magic such as ...". There is only one 0{40}
> magic and that one must be memorable and explainable.

Depending on how we're counting there's at least two. We also use 0000000000000000000000000000000000000000 as a placeholder for "couldn't read a ref" in addition or "this is a placeholder for an invalid ref" in addition to how it's used to signify creation/deletion to the in the likes of the pre-receive hook:

    $ echo hello > .git/refs/something
    $ git fsck
    [...]
    error: refs/something: invalid sha1 pointer 0000000000000000000000000000000000000000
    $ > .git/refs/something
    $ git fsck
    [...]
    error: refs/something: invalid sha1 pointer 0000000000000000000000000000000000000000

This is because the refs backend will memzero the oid struct, and if we fail to read things it'll still be zero'd out.

This manifests e.g. in this confusing fsck output, due to a bug where GitLab will write empty refs/keep-around/* refs sometimes: https://gitlab.com/gitlab-org/gitlab-ce/issues/44431

Show 6 quoted lines
> The 1/256 sample can be any one among 256.  Just like the date
> string on the first line of the output to be used as the /etc/magic
> signature by format-patch, it was an arbitrary choice, rather than a
> random choice, and unlike 0{40} this does not have to be memorable
> by general public and I do not have to explain the choice to the
> general public ;-)

I wanted to elaborate on the explanation for "gc.auto" in git-config. Now we just say "approximately 6700". Since this behavior has been really stable for a long time we could say we sample 1/256 of the .git/objects/?? dirs, and this explains any perceived discrepancies between the 6700 number and $(find .git/objects/?? -type f | wc -l).

Show 8 quoted lines
>> 2. It seems overly paranoid to be checking that the files in
>>   .git/objects/17/ look like a SHA-1.
>
> There is no other reason than futureproofing.  We were paying cost
> to open and scan the directory anyway, and checking that we only
> count the loose object files was (and still is) a sensible thing to
> do to allow us not even worry about the other kind of things we
> might end up creating there.

Makes sense. Just wanted to ask if it was that or some workaround for historical files being there.

Previous: Stefan BellerNext: Junio C Hamano
Message 79 of 97 in “People unaware of the importance of "git gc"?”
  1. Linus TorvaldsSep 5, 2007
  2. Martin LanghoffSep 5, 2007
  3. Karl HasselströmSep 5, 2007
  4. Junio C HamanoSep 5, 2007
  5. Tomash BrechkoSep 5, 2007
  6. Johan HerlandSep 5, 2007
  7. Matthieu MoySep 5, 2007
  8. Johan HerlandSep 5, 2007
  9. David KastrupSep 5, 2007
  10. Pierre HabouzitSep 5, 2007
  11. David KastrupSep 5, 2007
  12. Matthieu MoySep 5, 2007
  13. Wincent ColaiutaSep 5, 2007
  14. Pierre HabouzitSep 5, 2007
  15. Junio C HamanoSep 5, 2007
  16. Steven GrimmSep 5, 2007
  17. Junio C HamanoSep 5, 2007
  18. Martin LanghoffSep 5, 2007
  19. Matthieu MoySep 5, 2007
  20. Johan De MessemaekerSep 5, 2007
  21. Matthieu MoySep 5, 2007
  22. Jeff KingSep 5, 2007
  23. David KastrupSep 5, 2007
  24. Pierre HabouzitSep 5, 2007
  25. NixSep 5, 2007
  26. Steven GrimmSep 5, 2007
  27. NixSep 5, 2007
  28. Nicolas PitreSep 5, 2007
  29. Junio C HamanoSep 5, 2007
  30. Nicolas PitreSep 5, 2007
  31. NixSep 5, 2007
  32. Junio C HamanoSep 5, 2007
  33. Nicolas PitreSep 5, 2007
  34. Junio C HamanoSep 5, 2007
  35. Carlos RicaSep 6, 2007
  36. David KastrupSep 6, 2007
  37. Junio C HamanoSep 5, 2007
  38. Invoke "git gc --auto" from commit, merge, am and rebase.Junio C Hamano, Sep 5, 2007
  39. Shawn O. PearceSep 6, 2007
  40. Invoke "git gc --auto" from "git add" and "git fetch"Junio C Hamano, Sep 5, 2007
  41. Johannes SchindelinSep 6, 2007
  42. Alex RiesenSep 5, 2007
  43. Russ DillSep 6, 2007
  44. Shawn O. PearceSep 6, 2007
  45. Andreas EricssonSep 6, 2007
  46. Shawn O. PearceSep 6, 2007
  47. Steven GrimmSep 6, 2007
  48. Shawn O. PearceSep 6, 2007
  49. Johannes SchindelinSep 6, 2007
  50. Junio C HamanoSep 6, 2007
  51. Linus TorvaldsSep 6, 2007
  52. Steven GrimmSep 6, 2007
  53. Subject: [PATCH] git-merge-packJunio C Hamano, Sep 6, 2007
  54. Linus TorvaldsSep 6, 2007
  55. Nicolas PitreSep 7, 2007
  56. Junio C HamanoSep 7, 2007
  57. Nicolas PitreSep 7, 2007
  58. Shawn O. PearceSep 7, 2007
  59. Junio C HamanoSep 7, 2007
  60. make sha1_file.c::matches_pack_name() available to othersJunio C Hamano, Sep 8, 2007
  61. pack-objects --repack-unpackedJunio C Hamano, Sep 8, 2007
  62. Johannes SixtSep 7, 2007
  63. Junio C HamanoSep 7, 2007
  64. Andy ParkinsSep 7, 2007
  65. Shawn O. PearceSep 7, 2007
  66. Johannes SchindelinSep 7, 2007
  67. What's so special about objects/17/ ?Ævar Arnfjörð Bjarmason, Oct 7, 2018
  68. Johannes SixtOct 7, 2018
  69. Ævar Arnfjörð BjarmasonOct 7, 2018
  70. Johannes SixtOct 7, 2018
  71. Junio C HamanoOct 8, 2018
  72. Junio C HamanoOct 7, 2018
  73. Junio C HamanoOct 7, 2018
  74. Stefan BellerOct 8, 2018
  75. Junio C HamanoOct 9, 2018
  76. Stefan BellerOct 9, 2018
  77. Junio C HamanoOct 10, 2018
  78. Stefan BellerOct 10, 2018
  79. Ævar Arnfjörð BjarmasonOct 8, 2018
  80. Junio C HamanoOct 9, 2018
  81. Stefan BellerOct 9, 2018
  82. David KastrupSep 5, 2007
  83. Govind SalinasSep 5, 2007
  84. Carl WorthSep 5, 2007
  85. Jing XueSep 5, 2007
  86. Steven GrimmSep 5, 2007
  87. NixSep 5, 2007
  88. J. Bruce FieldsSep 5, 2007
  89. Brandon CaseySep 5, 2007
  90. David KastrupSep 5, 2007
  91. J. Bruce FieldsSep 5, 2007
  92. David KastrupSep 5, 2007
  93. Mike HommeySep 5, 2007
  94. Alex RiesenSep 5, 2007
  95. Steven GrimmSep 5, 2007
  96. David KastrupSep 5, 2007
  97. Fwd: [PATCH] Invoke "git gc --auto" from "git add" and "git fetch"Govind Salinas, Sep 5, 2007

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.