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

Re: [PATCH 4/4] docs: note that archives are not stable

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 28, 2021, 18:19 UTC
Message-ID
<YDvexO2NFM0KZ1Jo@camp.crustytoothpaste.net>
In-Reply-To
<87h7lwl5mv.fsf@evledraar.gmail.com>
On 2021-02-28 at 12:48:56, Ævar Arnfjörð Bjarmason wrote:
Show 17 quoted lines
> Perhaps something like this instead:
> 
>     The output of 'git archive' is guaranteed to be the same across
>     versions of git, but the archive itself is not guaranteed to be
>     bit-for-bit identical.
> 
>     In practice the output of 'git archive' is relatively stable across
>     git versions, but has changed in the past, and most likely will in
>     the future.
> 
>     Since the tar format provides multiple ways to encode the same
>     output (ordering, headers, padding etc.) you should not rely on
>     output being bit-for-bit identical across versions of git for
>     e.g. GPG signing a SHA-256 hash of an archive generated with one
>     version of git, and then expecting to be able to validate that GPG
>     signature with a freshly generated archive made with same arguments
>     on another version of git.

I think something like this is good. I'm a bit nervous about telling people that the output is relatively stable because that will likely push people in the direction that we don't want to encourage. I might rephrase the first two paragraphs as so:

  The output of 'git archive' is guaranteed to be the same across
  versions of git, but the archive itself is not guaranteed to be
  bit-for-bit identical.  The output of 'git archive' has changed
  in the past, and most likely will in the future.

I'm not very familiar with the zip format, but I assume that it also has features that allow equivalent but not bit-for-bit equal archives. Looking at Wikipedia leads me to believe that one could indeed create different archives just by either writing a Zip64 record or not, and if we store the SHA-1 revision ID in a comment, then we would also produce a different archive when using an equivalent SHA-256 repo. And of course there's compression, which allows many different but equivalent serializations. So we'd probably need to say the same thing about zip files as well.

-- 
brian m. carlson (he/him or they/them)
Houston, Texas, US
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 12 of 16 in “Documentation updates to FAQ and git-archive”
  1. 0/4 Documentation updates to FAQ and git-archivebrian m. carlson, Feb 27, 2021
  2. 3/4 docs: add a FAQ section on push and fetch problemsbrian m. carlson, Feb 27, 2021
  3. Ævar Arnfjörð BjarmasonFeb 28, 2021
  4. brian m. carlsonFeb 28, 2021
  5. Junio C HamanoMar 1, 2021
  6. 1/4 docs: add a question on syncing repositories to the FAQbrian m. carlson, Feb 27, 2021
  7. Ævar Arnfjörð BjarmasonFeb 28, 2021
  8. brian m. carlsonMar 15, 2021
  9. 2/4 docs: add line ending configuration article to FAQbrian m. carlson, Feb 27, 2021
  10. 4/4 docs: note that archives are not stablebrian m. carlson, Feb 27, 2021
  11. Ævar Arnfjörð BjarmasonFeb 28, 2021
  12. brian m. carlsonFeb 28, 2021
  13. Ævar Arnfjörð BjarmasonFeb 28, 2021
  14. Junio C HamanoMar 1, 2021
  15. brian m. carlsonMar 3, 2021
  16. Junio C HamanoMar 3, 2021

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.