threads / discuss / 56520

git repack -A -d doesn't remove objects found in alternates?

Subject: git repack -A -d doesn't remove objects found in alternates?

## tl;dr

3 messages between Sep 17, 2021 and Sep 17, 2021.

replies: 2people: 2as markdown or json

Uwe Kleine-König· Sep 17, 2021, 08:56 UTC · lore
Hello,

I wonder if I do something wrong, or if I just don't understand something:

	ukl@dude04:~/work$ git version
	git version 2.30.2
	ukl@dude04:~/work$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
	...
	ukl@dude04:~/work$ cd linux/
	ukl@dude04:~/work/linux$ du -sh .git/objects
	2.6G    .git/objects
	ukl@dude04:~/work/linux$ echo "/ptx/work/user/git/linux.git/objects" > .git/objects/info/alternates
	ukl@dude04:~/work/linux$ git repack -A -d
	...
	ukl@dude04:~/work/linux$ du -sh .git/objects/
	2.6G	.git/objects/

I would have expected a drastic size decrease from git repack after the alternate is added. Compare with:

	ukl@dude04:~/work$ time git clone --reference /ptx/work/user/git/linux.git https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-with-reference
	Cloning into 'linux-with-reference'...
	Updating files: 100% (73605/73605), done.
	ukl@dude04:~/work$ du -sh linux-with-reference/.git/objects/
	4.0K	linux-with-reference/.git/objects/
Can you spot the bug (or the wrong expectation)?

Thanks Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
Bryan Turner· Sep 17, 2021, 09:08 UTC · re: Uwe Kleine-König · lore

Re: git repack -A -d doesn't remove objects found in alternates?

On Fri, Sep 17, 2021 at 1:56 AM Uwe Kleine-König <u.kleine-koenig@pengutronix.de> wrote:

Show 23 quoted lines
>
> Hello,
>
> I wonder if I do something wrong, or if I just don't understand
> something:
>
>         ukl@dude04:~/work$ git version
>         git version 2.30.2
>
>         ukl@dude04:~/work$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
>         ...
>         ukl@dude04:~/work$ cd linux/
>         ukl@dude04:~/work/linux$ du -sh .git/objects
>         2.6G    .git/objects
>         ukl@dude04:~/work/linux$ echo "/ptx/work/user/git/linux.git/objects" > .git/objects/info/alternates
>
>         ukl@dude04:~/work/linux$ git repack -A -d
>         ...
>         ukl@dude04:~/work/linux$ du -sh .git/objects/
>         2.6G    .git/objects/
>
> I would have expected a drastic size decrease from git repack after the
> alternate is added.

You're missing -l on your repack command. See git help pack-objects and look for --local. Without -l, repack includes copies of the objects you're borrowing, so your pack size doesn't change.

Hope this helps! Bryan

Uwe Kleine-König· Sep 17, 2021, 10:28 UTC · re: Bryan Turner · lore

Re: git repack -A -d doesn't remove objects found in alternates?

On Fri, Sep 17, 2021 at 02:08:58AM -0700, Bryan Turner wrote:
Show 31 quoted lines
> On Fri, Sep 17, 2021 at 1:56 AM Uwe Kleine-König
> <u.kleine-koenig@pengutronix.de> wrote:
> >
> > Hello,
> >
> > I wonder if I do something wrong, or if I just don't understand
> > something:
> >
> >         ukl@dude04:~/work$ git version
> >         git version 2.30.2
> >
> >         ukl@dude04:~/work$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> >         ...
> >         ukl@dude04:~/work$ cd linux/
> >         ukl@dude04:~/work/linux$ du -sh .git/objects
> >         2.6G    .git/objects
> >         ukl@dude04:~/work/linux$ echo "/ptx/work/user/git/linux.git/objects" > .git/objects/info/alternates
> >
> >         ukl@dude04:~/work/linux$ git repack -A -d
> >         ...
> >         ukl@dude04:~/work/linux$ du -sh .git/objects/
> >         2.6G    .git/objects/
> >
> > I would have expected a drastic size decrease from git repack after the
> > alternate is added.
> 
> You're missing -l on your repack command. See git help pack-objects
> and look for --local. Without -l, repack includes copies of the
> objects you're borrowing, so your pack size doesn't change.
> 
> Hope this helps!

It does. When adding -l the size reported by du goes down to 8K. Thanks a lot.

While refering to other manpages is easy to maintain, it's hard to read for a user.

Best regards Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

← back to recent threads