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

Re: [PATCH/RFC] Teach repack to optionally retain otherwise lost objects

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 29, 2007, 06:15 UTC
Message-ID
<7vaboxy3va.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<Pine.LNX.4.64.0711290340470.27959@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 6 quoted lines
> 	Besides, a completely different idea just struck me: before
> 	repacking, .git/objects/pack/* could be _hard linked_ to the
> 	forkee's object stores.  Then nothing in git-repack's code
> 	needs to be changed.
>
> 	Oh, well.  I just wasted 1.5 hours.
Your 1.5 hours was spent wisely to come up with that idea ;-).

To make sure I understand your idea correctly, the procedure to repack a repository in a fork-friendly way is:

 (1) find the project directly forked from you;
 (2) hardlink all packs under your object store to their object store;
 (3) repack -a -l and prune.

I think that would work as long as you do the above as a unit and handle one repository at a time. Otherwise I think you risk losing necessary objects when hierarchical forks are involved. E.g. if you have a project X that has a fork Y which in turn has fork Z.

	* Step 1 is run for X, Y and Z.
        * Step 2 is run for Y and Z.
        * Step 3 is run for Z.

At this point, Z is still borrowing objects from Y and X through Y, and it will not keep objects it is borrowing from X through Y. Then if the procedure is intermixed like this, a bad thing happens.

	* Step 2 is run for X.
	* Step 3 is run for Y.
	* Step 3 is run for X.

Step 3 for Y would lose objects Y was borrowing from X that were not used by Y itself. At this point, Z is still usable as the objects it is borrowing from X though Y have not been pruned from X. But Step 3 for X will lose them, rendering Z unusable.

Previous: Johannes SchindelinNext: Johannes Schindelin
Message 6 of 14 in “[RFC] Alternates and broken repos: A pack and prune scheme to avoid them”
  1. Johannes SixtNov 18, 2007
  2. Junio C HamanoNov 18, 2007
  3. Johannes SixtNov 18, 2007
  4. Junio C HamanoNov 18, 2007
  5. Teach repack to optionally retain otherwise lost objectsJohannes Schindelin, Nov 29, 2007
  6. Junio C HamanoNov 29, 2007
  7. Johannes SchindelinNov 29, 2007
  8. Add "--expire <time>" option to 'git prune'Johannes Schindelin, Nov 29, 2007
  9. Johannes SixtNov 29, 2007
  10. Add "--expire <time>" option to 'git prune'Johannes Schindelin, Nov 29, 2007
  11. Jeff KingNov 29, 2007
  12. Johannes SchindelinNov 29, 2007
  13. Junio C HamanoNov 29, 2007
  14. Add "--expire <time>" option to 'git prune'Johannes Schindelin, Nov 29, 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.