-
Notifications
You must be signed in to change notification settings - Fork 27.2k
worktree: clarify --expire applies to missing worktrees #2135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
The `--expire` option for `git worktree list` and `git worktree prune` only affects worktrees whose working directory path no longer exists. The help text did not make this clear, and the documentation inconsistently used "unused" for prune but "missing" for list. This updates the help text and documentation to consistently describe these as "missing worktrees". Signed-off-by: Sam Bostock <[email protected]>
|
/submit |
|
Submitted as [email protected] To fetch this version into To fetch this version to local tag |
|
On the Git mailing list, Eric Sunshine wrote (reply to this): On Fri, Dec 19, 2025 at 10:01 AM Sam Bostock via GitGitGadget
<[email protected]> wrote:
> The `--expire` option for `git worktree list` and `git worktree prune`
> only affects worktrees whose working directory path no longer exists.
> The help text did not make this clear, and the documentation
> inconsistently used "unused" for prune but "missing" for list.
>
> This updates the help text and documentation to consistently describe
> these as "missing worktrees".
>
> Signed-off-by: Sam Bostock <[email protected]>
> ---
This change makes sense to me; it certainly helps clarify the meaning.
One or two comments (below)...
> diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc
> @@ -271,7 +271,7 @@ mismatch, even if the links are correct.
> `--expire <time>`::
> - With `prune`, only expire unused worktrees older than _<time>_.
> + With `prune`, only expire missing worktrees older than _<time>_.
Rather than saying that this "expires", I wonder if it would be even
clearer to say that it prunes or removes information about missing
worktrees. Something like:
With `prune`, only prune missing worktrees if older than _<time>_.
> diff --git a/builtin/worktree.c b/builtin/worktree.c
> @@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
> OPT_EXPIRY_DATE(0, "expire", &expire,
> - N_("expire working trees older than <time>")),
> + N_("expire missing working trees older than <time>")),
Same comment:
N_("prune missing working trees older than <time>")),
> @@ -1070,7 +1070,7 @@ static int list(int ac, const char **av, const char *prefix,
> OPT_EXPIRY_DATE(0, "expire", &expire,
> - N_("add 'prunable' annotation to worktrees older than <time>")),
> + N_("add 'prunable' annotation to missing worktrees older than <time>")),
This one is fine as-is (with your change applied). |
|
User |
|
There are issues in commit 35da947: |
Use 'prune' instead of 'expire' when describing the --expire option's effect on missing worktrees, since the terminology is clearer. Signed-off-by: Sam Bostock <[email protected]>
35da947 to
ff4732b
Compare
|
/submit |
|
Submitted as [email protected] To fetch this version into To fetch this version to local tag |
|
On the Git mailing list, Junio C Hamano wrote (reply to this): Eric Sunshine <[email protected]> writes:
> On Fri, Dec 19, 2025 at 10:01 AM Sam Bostock via GitGitGadget
> <[email protected]> wrote:
>> The `--expire` option for `git worktree list` and `git worktree prune`
>> only affects worktrees whose working directory path no longer exists.
>> The help text did not make this clear, and the documentation
>> inconsistently used "unused" for prune but "missing" for list.
>>
>> This updates the help text and documentation to consistently describe
>> these as "missing worktrees".
>>
>> Signed-off-by: Sam Bostock <[email protected]>
>> ---
>
> This change makes sense to me; it certainly helps clarify the meaning.
> One or two comments (below)...
>
>> diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc
>> @@ -271,7 +271,7 @@ mismatch, even if the links are correct.
>> `--expire <time>`::
>> - With `prune`, only expire unused worktrees older than _<time>_.
>> + With `prune`, only expire missing worktrees older than _<time>_.
>
> Rather than saying that this "expires", I wonder if it would be even
> clearer to say that it prunes or removes information about missing
> worktrees. Something like:
>
> With `prune`, only prune missing worktrees if older than _<time>_.
Yup, and a very related tangent.
The entry for 'prune' itself reads like this:
`prune`::
Prune worktree information in `$GIT_DIR/worktrees`.
In general (see recent topics by Julia, for example), it is risky to
explain option DOSOMETHING in terms of the same verb dosomething.
It may serve as a memory aid, but at the same time, if the verb
dosomething is not in everyday lingo, can mean different things, or
we use it a bit differently from the common uses, explaining the
option using a more familiar verb may be helpful, especially to non
native audiences.
In the context of *removing* a worktree, there are potentially three
situations.
(1) the user has both the working tree and the control info
healthy, and they no longer needs it (i.e., "git worktree
remove")
(2) the user still has the working tree, but somehow lost the
control info. Git does not have a direct way to remove the
working tree and we expect the user to do "rm -rf" the
remaining working tree.
(3) the user somehow has lost the working tree but the control info
remains, and they want to remove the useless entry from "git
worktree list". This is what "git worktree prune" is about.
It would have been nice if we could arrange the situation (2) and
(3) to be impossible to get into, but running "rm -rf" on random
directories is not a privileged operation on most systems, so the
users can easily get into them, especially (3). It would be very
nice if we can find a better wording than "Prune worktree info" to
explain the 'prune' operation.
I wonder if this would work better.
`prune`::
Remove worktree information in `$GIT_DIR/worktrees`
only, without touching the working tree. This is
often needed when the working tree is lost (e.g.,
the user manually removed it) and the worktree
information has become dangling.
|
| `--verbose`:: | ||
| With `prune`, report all removals. | ||
| + | ||
| With `list`, output additional information about worktrees (see below). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Junio C Hamano wrote (reply to this):
"Sam Bostock via GitGitGadget" <[email protected]> writes:
> From: Sam Bostock <[email protected]>
>
> The `--expire` option for `git worktree list` and `git worktree prune`
> only affects worktrees whose working directory path no longer exists.
> The help text did not make this clear, and the documentation
> inconsistently used "unused" for prune but "missing" for list.
Well analyzed and described.
> This updates the help text and documentation to consistently describe
> these as "missing worktrees".
We phrase it more like "Update the help text and documentation to
...", as if you are asking somebody sitting on the keyboard to make
that change.
> diff --git a/builtin/worktree.c b/builtin/worktree.c
> index fbdaf2eb2e..82fcbfeccf 100644
> --- a/builtin/worktree.c
> +++ b/builtin/worktree.c
> @@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
> OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
> OPT__VERBOSE(&verbose, N_("report pruned working trees")),
> OPT_EXPIRY_DATE(0, "expire", &expire,
> - N_("expire working trees older than <time>")),
> + N_("expire missing working trees older than <time>")),
"expire" -> "prune" or "remove". As the user already said "prune"
when they run "git worktree prune -h", using a different and more
common verb "remove" to explain the action might be more helpful
than saying "prune".
Thanks.| `--verbose`:: | ||
| With `prune`, report all removals. | ||
| + | ||
| With `list`, output additional information about worktrees (see below). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Junio C Hamano wrote (reply to this):
"Sam Bostock via GitGitGadget" <[email protected]> writes:
> From: Sam Bostock <[email protected]>
>
> Use 'prune' instead of 'expire' when describing the --expire option's
> effect on missing worktrees, since the terminology is clearer.
>
> Signed-off-by: Sam Bostock <[email protected]>
> ---
> Documentation/git-worktree.adoc | 2 +-
> builtin/worktree.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
Does this v2 use exactly the same commit from v1 as [1/2] and add
this [2/2] as if you are saying "oops, the previous one missed
something we should have updated but forgot/failed to do so; here is
an improvement?"
Don't. Unless the change you deliberately made as a follow-up
improvement is logically separate and significant, that is.
Thanks.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All vpn trel
|
On the Git mailing list, Eric Sunshine wrote (reply to this): On Sat, Dec 20, 2025 at 12:44 AM Junio C Hamano <[email protected]> wrote:
> I wonder if this would work better.
>
> `prune`::
> Remove worktree information in `$GIT_DIR/worktrees`
> only, without touching the working tree. This is
> often needed when the working tree is lost (e.g.,
> the user manually removed it) and the worktree
> information has become dangling.
Yes, this is a useful improvement, although one part confuses me (and
I would omit it). In particular, if the working tree is lost, thus the
`$GIT_DIR/worktrees` is dangling ought to be removed, then I'm not
sure why you would say "without touching the working tree" (which is
already lost). |
|
On the Git mailing list, Junio C Hamano wrote (reply to this): Eric Sunshine <[email protected]> writes:
> On Sat, Dec 20, 2025 at 12:44 AM Junio C Hamano <[email protected]> wrote:
>> I wonder if this would work better.
>>
>> `prune`::
>> Remove worktree information in `$GIT_DIR/worktrees`
>> only, without touching the working tree. This is
>> often needed when the working tree is lost (e.g.,
>> the user manually removed it) and the worktree
>> information has become dangling.
>
> Yes, this is a useful improvement, although one part confuses me (and
> I would omit it). In particular, if the working tree is lost, thus the
> `$GIT_DIR/worktrees` is dangling ought to be removed, then I'm not
> sure why you would say "without touching the working tree" (which is
> already lost).
Ahh, I somehow thought you can say "git worktree prune <worktree>"
to remove only the control information while the working tree is
still there, sort of "orphaning" the working tree from the main
repository. But things do not work that way.
You're right that "without touching the working tree" part is
misleading and redundant. And it is not "this is often needed"; it
is the _only_ scenario the operation makes sense.
`prune`::
Remove worktree information in `$GIT_DIR/worktrees`
for worktrees whose working trees are missing.
Useful after manually removing a working tree that
is no longer needed (but use "git worktree remove"
next time you want to do so). Also if you _moved_ a
working tree elsewhere to cause the worktree
information dangling, see "git worktree repair" to
reconnect the worktree to the new working tree
location.
perhaps?
|
|
What are you doing
-------- Original Email --------
From: "gitgitgadget-git[bot]" ***@***.***>
Sent: December 20, 2025 11:29:03 AM GMT+04:00
To: git/git ***@***.***>
Cc: Subscribed ***@***.***>
Subject: Re: [git/git] worktree: clarify --expire applies to missing worktrees (PR #2135)
gitgitgadget-git[bot] left a comment (git/git#2135)
[On the Git mailing ***@***.***), Eric Sunshine wrote ([reply to this](https://gitgitgadget.github.io/reply-to-this)):
``````````email
On Sat, Dec 20, 2025 at 12:44 AM Junio C Hamano ***@***.***> wrote:
I wonder if this would work better.
`prune`::
Remove worktree information in `$GIT_DIR/worktrees`
only, without touching the working tree. This is
often needed when the working tree is lost (e.g.,
the user manually removed it) and the worktree
information has become dangling.
Yes, this is a useful improvement, although one part confuses me (and
I would omit it). In particular, if the working tree is lost, thus the
`$GIT_DIR/worktrees` is dangling ought to be removed, then I'm not
sure why you would say "without touching the working tree" (which is
already lost).
``````````
…--
Reply to this email directly or view it on GitHub:
#2135 (comment)
You are receiving this because you are subscribed to this thread.
Message ID: ***@***.***>
|
|
On the Git mailing list, Eric Sunshine wrote (reply to this): On Sat, Dec 20, 2025 at 2:31 AM Junio C Hamano <[email protected]> wrote:
> Eric Sunshine <[email protected]> writes:
> > On Sat, Dec 20, 2025 at 12:44 AM Junio C Hamano <[email protected]> wrote:
> >> I wonder if this would work better.
> >> `prune`::
> >> Remove worktree information in `$GIT_DIR/worktrees`
> >> only, without touching the working tree. This is
> >> often needed when the working tree is lost (e.g.,
> >> the user manually removed it) and the worktree
> >> information has become dangling.
> >
> > Yes, this is a useful improvement, although one part confuses me (and
> > I would omit it). In particular, if the working tree is lost, thus the
> > `$GIT_DIR/worktrees` is dangling ought to be removed, then I'm not
> > sure why you would say "without touching the working tree" (which is
> > already lost).
>
> Ahh, I somehow thought you can say "git worktree prune <worktree>"
> to remove only the control information while the working tree is
> still there, sort of "orphaning" the working tree from the main
> repository. But things do not work that way.
>
> You're right that "without touching the working tree" part is
> misleading and redundant. And it is not "this is often needed"; it
> is the _only_ scenario the operation makes sense.
>
> `prune`::
> Remove worktree information in `$GIT_DIR/worktrees`
> for worktrees whose working trees are missing.
> Useful after manually removing a working tree that
> is no longer needed (but use "git worktree remove"
> next time you want to do so). Also if you _moved_ a
> working tree elsewhere to cause the worktree
> information dangling, see "git worktree repair" to
> reconnect the worktree to the new working tree
> location.
>
> perhaps?
Yes, this sounds fine. This information is discussed in the
DESCRIPTION section of the document, but it doesn't hurt to flesh it
out here, as well. |
Changes from v1:
effect on missing worktrees, since the terminology is clearer.
cc: Eric Sunshine [email protected]