# [PATCH] Recommend "git gc --auto" instead of "git prune"

5 messages from 2020-06-07 to 2020-06-08. Participants: John Lin via GitGitGadget, brian m. carlson, Junio C Hamano, Denton Liu.
Thread: https://gitlist.dev/t/53630

## John Lin via GitGitGadget, 2020-06-07 16:18

Subject: [PATCH] Recommend "git gc --auto" instead of "git prune"
Message-ID: <pull.651.git.1591546715913.gitgitgadget@gmail.com>
URL: https://gitlist.dev/e/pull.651.git.1591546715913.gitgitgadget%40gmail.com

```
From: John Lin <johnlinp@gmail.com>

Signed-off-by: John Lin <johnlinp@gmail.com>
---
    Recommend "git gc --auto" instead of "git prune"
    
    Fix according to #642.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-651%2Fjohnlinp%2Ffix-git-gc-warning-message-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-651/johnlinp/fix-git-gc-warning-message-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/651

 builtin/gc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/builtin/gc.c b/builtin/gc.c
index 8e0b9cf41b3..3833a3de332 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -692,7 +692,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 
 	if (auto_gc && too_many_loose_objects())
 		warning(_("There are too many unreachable loose objects; "
-			"run 'git prune' to remove them."));
+			"run 'git gc --auto' to remove them."));
 
 	if (!daemonized)
 		unlink(git_path("gc.log"));

base-commit: 20514004ddf1a3528de8933bc32f284e175e1012
-- 
gitgitgadget

```

## brian m. carlson, 2020-06-07 16:25

Subject: Re: [PATCH] Recommend "git gc --auto" instead of "git prune"
Message-ID: <20200607162556.GJ6569@camp.crustytoothpaste.net>
URL: https://gitlist.dev/e/20200607162556.GJ6569%40camp.crustytoothpaste.net
In-Reply-To: <pull.651.git.1591546715913.gitgitgadget@gmail.com>

```
On 2020-06-07 at 16:18:35, John Lin via GitGitGadget wrote:
> From: John Lin <johnlinp@gmail.com>
> 
> Signed-off-by: John Lin <johnlinp@gmail.com>
> ---
>     Recommend "git gc --auto" instead of "git prune"
>     
>     Fix according to #642.
> 
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-651%2Fjohnlinp%2Ffix-git-gc-warning-message-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-651/johnlinp/fix-git-gc-warning-message-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/651
> 
>  builtin/gc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/builtin/gc.c b/builtin/gc.c
> index 8e0b9cf41b3..3833a3de332 100644
> --- a/builtin/gc.c
> +++ b/builtin/gc.c
> @@ -692,7 +692,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
>  
>  	if (auto_gc && too_many_loose_objects())
>  		warning(_("There are too many unreachable loose objects; "
> -			"run 'git prune' to remove them."));
> +			"run 'git gc --auto' to remove them."));

I'm not sure this is correct.  If we have just expelled a large number
of objects from a pack into loose objects because they're no longer
referenced, it's possible we may trigger another git gc --auto on the
next time we run a command.  If so, no amount of git gc --auto is going
to help here; you really have to run git prune.
-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204

```

## Junio C Hamano, 2020-06-07 17:10

Subject: Re: [PATCH] Recommend "git gc --auto" instead of "git prune"
Message-ID: <xmqq8sgyn6o4.fsf@gitster.c.googlers.com>
URL: https://gitlist.dev/e/xmqq8sgyn6o4.fsf%40gitster.c.googlers.com
In-Reply-To: <20200607162556.GJ6569@camp.crustytoothpaste.net>

```
"brian m. carlson" <sandals@crustytoothpaste.net> writes:

>> diff --git a/builtin/gc.c b/builtin/gc.c
>> index 8e0b9cf41b3..3833a3de332 100644
>> --- a/builtin/gc.c
>> +++ b/builtin/gc.c
>> @@ -692,7 +692,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
>>  
>>  	if (auto_gc && too_many_loose_objects())
>>  		warning(_("There are too many unreachable loose objects; "
>> -			"run 'git prune' to remove them."));
>> +			"run 'git gc --auto' to remove them."));
>
> I'm not sure this is correct.  If we have just expelled a large number
> of objects from a pack into loose objects because they're no longer
> referenced, it's possible we may trigger another git gc --auto on the
> next time we run a command.  If so, no amount of git gc --auto is going
> to help here; you really have to run git prune.

Correct.  When running manually, after noticing the need to do a GC,
it is a mental bug to add "--auto" to it, I would think.

```

## Denton Liu, 2020-06-07 20:45

Subject: Re: [PATCH] Recommend "git gc --auto" instead of "git prune"
Message-ID: <20200607204531.GA2313@generichostname>
URL: https://gitlist.dev/e/20200607204531.GA2313%40generichostname
In-Reply-To: <xmqq8sgyn6o4.fsf@gitster.c.googlers.com>

```
Hi all,

On Sun, Jun 07, 2020 at 10:10:19AM -0700, Junio C Hamano wrote:
> "brian m. carlson" <sandals@crustytoothpaste.net> writes:
> 
> >> diff --git a/builtin/gc.c b/builtin/gc.c
> >> index 8e0b9cf41b3..3833a3de332 100644
> >> --- a/builtin/gc.c
> >> +++ b/builtin/gc.c
> >> @@ -692,7 +692,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
> >>  
> >>  	if (auto_gc && too_many_loose_objects())
> >>  		warning(_("There are too many unreachable loose objects; "
> >> -			"run 'git prune' to remove them."));
> >> +			"run 'git gc --auto' to remove them."));
> >
> > I'm not sure this is correct.  If we have just expelled a large number
> > of objects from a pack into loose objects because they're no longer
> > referenced, it's possible we may trigger another git gc --auto on the
> > next time we run a command.  If so, no amount of git gc --auto is going
> > to help here; you really have to run git prune.
> 
> Correct.  When running manually, after noticing the need to do a GC,
> it is a mental bug to add "--auto" to it, I would think.

Sorry about the confusion, when I was responding to the original
issue[0], I mistakenly typed the wrong thing. I meant to suggest
replacing it with `git gc --prune=now`, _not_ `git gc --auto` but I
guess I had my wires crossed. With this in mind...

The rationale behind this change is that John wanted to add bash
completions for `git prune`. However, I noted that prune is a plumbing
command and users should opt to use `git gc` instead. He mentioned that
sometimes when auto gc runs, it tells the user that they should run
`git prune` so I suggested (meant to suggest) replacing the command with
`git gc --prune=now` instead so that users could call the porcelain.

[0]: https://github.com/gitgitgadget/git/issues/642

```

## Junio C Hamano, 2020-06-08 17:34

Subject: Re: [PATCH] Recommend "git gc --auto" instead of "git prune"
Message-ID: <xmqqd069law7.fsf@gitster.c.googlers.com>
URL: https://gitlist.dev/e/xmqqd069law7.fsf%40gitster.c.googlers.com
In-Reply-To: <20200607204531.GA2313@generichostname>

```
Denton Liu <liu.denton@gmail.com> writes:

>> Correct.  When running manually, after noticing the need to do a GC,
>> it is a mental bug to add "--auto" to it, I would think.
>
> Sorry about the confusion, when I was responding to the original
> issue[0], I mistakenly typed the wrong thing. I meant to suggest
> replacing it with `git gc --prune=now`, _not_ `git gc --auto` but I
> guess I had my wires crossed. With this in mind...
>
> The rationale behind this change is that John wanted to add bash
> completions for `git prune`. However, I noted that prune is a plumbing
> command and users should opt to use `git gc` instead. He mentioned that
> sometimes when auto gc runs, it tells the user that they should run
> `git prune` so I suggested (meant to suggest) replacing the command with
> `git gc --prune=now` instead so that users could call the porcelain.

Nice to know.  The reasoning behind the change should be available
to those who only look at "git show".

John, if you are to send an updated patch, please make sure you have
a meaningful log message in it.

Thanks.

```
