Re: Large repo and pack.packsizelimit

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: Large repo and pack.packsizelimit

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:53:47

Thomas [off-list ref] writes:
(1) all objects to be transferred to another repo 
(2) all loose objects when starting a local repack
Case (1) can be fixed by transfer.unpacklimit but there is no fix for (2).
Technically (1) is putting everything in a single pack to transfer, and it
is only the receiving end that does the chopping.

For (2), you could do something like

	keep=$( git rev-list --objects $some_rev |
	        git pack-objects --delta-base-offset pack ) &&
	mv pack-$keep.pack pack-$keep.idx .git/objects/pack/ &&
	echo "keep $some_rev" >.git/objects/pack/pack-$keep.keep

after finding a suitable $some_rev that is old enough so that it will be
an ancestor of anything that matters in the future and gives small enough
packfiles.  You may want to try doing the above multiple times, by picking
a few strategic ranges, e.g.

	for some_rev in v1.0 v1.0..v2.0 v2.0..v2.4 v2.4..v3.0
	do
		... the above four lines come here ...
	done

The objects stored in .keep packs won't participate in future repack so
your "git repack -a -d" after that will put everything that is needed only
for versions newer than v3.0 in a single new pack.

Re: Large repo and pack.packsizelimit

From: Thomas <hidden>
Date: 2016-06-15 22:53:48

Junio C Hamano <gitster <at> pobox.com> writes:
Thomas <th.acker66 <at> arcor.de> writes:
quoted
(1) all objects to be transferred to another repo 
(2) all loose objects when starting a local repack
Case (1) can be fixed by transfer.unpacklimit but there is no fix for (2).
Technically (1) is putting everything in a single pack to transfer, and it
is only the receiving end that does the chopping.

For (2), you could do something like

	keep=$( git rev-list --objects $some_rev |
	        git pack-objects --delta-base-offset pack ) &&
	mv pack-$keep.pack pack-$keep.idx .git/objects/pack/ &&
	echo "keep $some_rev" >.git/objects/pack/pack-$keep.keep

after finding a suitable $some_rev that is old enough so that it will be
an ancestor of anything that matters in the future and gives small enough
packfiles.  You may want to try doing the above multiple times, by picking
a few strategic ranges, e.g.

	for some_rev in v1.0 v1.0..v2.0 v2.0..v2.4 v2.4..v3.0
	do
		... the above four lines come here ...
	done
Not really a porcelain-level solution ;-) but I will try it.
Thanks!
Is there any chance that (1) and (2) will be solved by using packsizelimit
in the future?
Will there be any porcelain/plumbing commands for creating/deleting
.keep files for packs?
---
Thomas
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help