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

Re: [PATCH 0/3] Implement filtering repacks

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 14, 2022, 16:46 UTC
Message-ID
<xmqqilkm9wv6.fsf@gitster.g>
In-Reply-To
<20221012135114.294680-1-christian.couder@gmail.com>
Christian Couder <christian.couder@gmail.com> writes:
Show 10 quoted lines
> For example one might want to clone with a filter to avoid too many
> space to be taken by some large blobs, and one might realize after
> some time that a number of the large blobs have still be downloaded
> because some old branches referencing them were checked out. In this
> case a filtering repack could remove some of those large blobs.
>
> Some of the comments on the patch series that John sent were related
> to the possible data loss and repo corruption that a filtering repack
> could cause. It's indeed true that it could be very dangerous, and we
> agree that improvements were needed in this area.
The wish is understandable, but I do not think this gives a good UI.

This feature is, from an end-user's point of view, very similar to "git prune-packed", in that we prune data that is not necessary due to redundancy. Nobody runs "prune-packed" directly; most people are even unaware of it being run on their behalf when they run "git gc".

Reusing pack-objects as an underlying mechanism is OK, but this needs to be plumbed through to "git gc" for a more consistent experience for the end users.

Is there a way to check if the "promisor remote" is still willing to keep the previous promise it made, so that the users do not have to see "we may corrupt the repository as the result of this operation, you have been warned", by the way? Possibly with a protocol extension?

In a sense, once you made a partial clone, your repository is at the mercy of the remote. They can disappear any time with majority of the data you depend on, leaving only what you created locally and haven't pruned away, in a repository that may technically pass "fsck", because the things that are supposed to exist locally exists, but may not be usable in practice. So from that point of view, a simple check that asks "I earlier fetched from you with this filter and these tips of histories; are you still willing to support me?" and gets yes/no answer might be sufficient. A remote that is not trustworthy can say "yes" and still change their mind later, so such a check may not even be needed.

The above two big paragraphs is a way to say that I am not all that worried about losing objects that we should be able to refetch again by adding this feature. The perceived need for "--force" or "must run from terminal" may be overblown. I do not think this negatively affects correctness or robustness at all (as long as the pruning is not buggy, of course).

HOWEVER

Unlike prune-packed, pruning objects that could be refetched has negative performance impact. So adding an option to enable/disable such pruning is needed. If the frontmost UI entry point were "gc", it needs an opt-in option to invoke the "filtering repack", in other words. "pack-objects" should not need any more work than what you have here (with the "terminal" and "force" discarded), as "--filter" is such an opt-in option already.

Previous: Christian CouderNext: Christian Couder
Message 5 of 46 in “Implement filtering repacks”
  1. 0/3 Implement filtering repacksChristian Couder, Oct 12, 2022
  2. 1/3 pack-objects: allow --filter without --stdoutChristian Couder, Oct 12, 2022
  3. 2/3 repack: add --filter=<filter-spec> optionChristian Couder, Oct 12, 2022
  4. 3/3 repack: introduce --force to force filteringChristian Couder, Oct 12, 2022
  5. Junio C HamanoOct 14, 2022
  6. Christian CouderOct 20, 2022
  7. Taylor BlauOct 28, 2022
  8. Junio C HamanoOct 28, 2022
  9. Christian CouderNov 7, 2022
  10. Christian CouderNov 7, 2022
  11. 0/2 Implement filtering repacksChristian Couder, Oct 25, 2022
  12. 1/2 pack-objects: allow --filter without --stdoutChristian Couder, Oct 25, 2022
  13. 2/2 repack: add --filter=<filter-spec> optionChristian Couder, Oct 25, 2022
  14. Taylor BlauOct 28, 2022
  15. Christian CouderNov 7, 2022
  16. 0/2 Implement filtering repacksChristian Couder, Nov 22, 2022
  17. 1/2 pack-objects: allow --filter without --stdoutChristian Couder, Nov 22, 2022
  18. 2/2 repack: add --filter=<filter-spec> optionChristian Couder, Nov 22, 2022
  19. Junio C HamanoNov 23, 2022
  20. Christian CouderDec 21, 2022
  21. Junio C HamanoNov 23, 2022
  22. 0/3 Implement filtering repacksChristian Couder, Dec 21, 2022
  23. 1/3 pack-objects: allow --filter without --stdoutChristian Couder, Dec 21, 2022
  24. Patrick SteinhardtJan 4, 2023
  25. 2/3 repack: add --filter=<filter-spec> optionChristian Couder, Dec 21, 2022
  26. Patrick SteinhardtJan 4, 2023
  27. Junio C HamanoJan 5, 2023
  28. 3/3 gc: add gc.repackFilter config optionChristian Couder, Dec 21, 2022
  29. Patrick SteinhardtJan 4, 2023
  30. 0/3 upload-pack: support a missing-actionChristian Couder, May 15, 2024
  31. 1/3 rev-list: refactor --missing=<missing-action>Christian Couder, May 15, 2024
  32. Junio C HamanoMay 15, 2024
  33. 2/3 pack-objects: use the missing action APIChristian Couder, May 15, 2024
  34. Junio C HamanoMay 15, 2024
  35. Christian CouderMay 24, 2024
  36. 3/3 upload-pack: allow configuring a missing-actionChristian Couder, May 15, 2024
  37. Junio C HamanoMay 15, 2024
  38. Christian CouderMay 24, 2024
  39. Junio C HamanoMay 24, 2024
  40. Christian CouderMay 28, 2024
  41. Junio C HamanoMay 28, 2024
  42. Christian CouderMay 31, 2024
  43. Junio C HamanoJun 1, 2024
  44. Christian CouderJun 3, 2024
  45. Junio C HamanoJun 3, 2024
  46. Christian CouderMay 15, 2024

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.