threads / discuss / 19757

Confused about `git gc`

Subject: Confused about `git gc`

## tl;dr

3 messages between Jun 9, 2009 and Jun 9, 2009.

replies: 2people: 2as markdown or json

Yakup Akbay· Jun 9, 2009, 08:28 UTC · lore

Looks like I didn't quite understand the actual role of `git gc`. I just thought that `git gc` would remove all unreferenced objects during the unpack-pack process. However, I'm not seeing the result what I was expecting from `git gc`.

I'm adding an object into the database, which is ignored by git. Then I expect the object to be removed after `git gc`. But, it's still there.

Please follow:

$ echo "/ignored_file" > .gitignore $ echo "This file is ignored by git. I'm sure that this content has never been existed in the repository before." > ignored_file $ git hash-object -w ignored_file 39cd40a92c0a92bbcbd74ec6879b4936212beebd $ ls .git/objects/ 07 39 9f b9 d0 fa info pack $ ls .git/objects/39/ cd40a92c0a92bbcbd74ec6879b4936212beebd $ git gc Counting objects: 319, done. Delta compression using up to 2 threads. Compressing objects: 100% (147/147), done. Writing objects: 100% (319/319), done. Total 319 (delta 124), reused 319 (delta 124) $ ls .git/objects/39/ cd40a92c0a92bbcbd74ec6879b4936212beebd

As you see, 39cd40a92c0a92bbcbd74ec6879b4936212beebd is still there. Shouldn't it be removed by `git gc`?

What am I overlooking?

Regards, Yakup

Jakub Narebski· Jun 9, 2009, 10:45 UTC · re: Yakup Akbay · lore

Re: Confused about `git gc`

Yakup Akbay <yakbay@ubicom.com> writes:
Show 8 quoted lines
> Looks like I didn't quite understand the actual role of `git gc`. I
> just thought that `git gc` would remove all unreferenced objects
> during the unpack-pack process. However, I'm not seeing the result
> what I was expecting from `git gc`.
> 
> I'm adding an object into the database, which is ignored by git. Then
> I expect the object to be removed after `git gc`. But, it's still
> there.
[...]
> What am I overlooking?

You are probably overlooking the safety introduced to "git gc" to make it safer against concurrently run git operations, namely the fact that it would not remove new loose objects (it would remove loose objects only when they are old enough).

-- 
Jakub Narebski
Poland
ShadeHawk on #git
Yakup Akbay· Jun 9, 2009, 11:18 UTC · re: Jakub Narebski · lore

Re: Confused about `git gc`

Jakub Narebski wrote:
Show 24 quoted lines
> Yakup Akbay <yakbay@ubicom.com> writes:
>
>   
>> Looks like I didn't quite understand the actual role of `git gc`. I
>> just thought that `git gc` would remove all unreferenced objects
>> during the unpack-pack process. However, I'm not seeing the result
>> what I was expecting from `git gc`.
>>
>> I'm adding an object into the database, which is ignored by git. Then
>> I expect the object to be removed after `git gc`. But, it's still
>> there.
>>     
>
> [...]
>   
>> What am I overlooking?
>>     
>
> You are probably overlooking the safety introduced to "git gc" to make
> it safer against concurrently run git operations, namely the fact that
> it would not remove new loose objects (it would remove loose objects
> only when they are old enough).
>
>   
Hmm, I see.
    git gc --prune=<date>
helped me remove all loose objects.

Thanks, Yakup

← back to recent threads