Thread (54 messages) 54 messages, 8 authors, 2025-09-12

Re: [PATCH v3 10/11] contrib: remove "git-new-workdir"

From: Gabriel Scherer <hidden>
Date: 2025-09-08 15:22:46

On 08/09/2025 11:58, Kristoffer Haugsbakk wrote:
On Mon, Sep 8, 2025, at 11:28, Gabriel Scherer wrote:
quoted
Dear git developers,

I find myself affected by the removal of the `git-new-workdir` script
which is a relatively common part of my workflow. I am writing to ask
if it might be possible to reinstate the script in `contrib`, and also
possibly create a discussion with other users affected.

(The removal of the script was released in git 2.51, three weeks ago.)
Did you run into this issue when upgrading from 2.50 to 2.51 or from an
older version?  Was it simple to troubleshoot that the script was gone?
I create a new workdir by manually running
/usr/share/doc/git/contrib/workdir/git-new-workdir, so indeed I
quickly found out that the wordir/ folder was gone and this was
clearly a git-side packaging change.
Just curious.  I’m as naïve about release management as any
random person!
quoted
Thanks for your work on git!


## Details/comments

  > The command thus predates git-worktree(1), which is what people use
  > nowadays to create any such working directory. As such, the script
  > doesn't really have much of a reason to exist nowadays anymore.

`git worktree` suffers from the substantial restriction that it is not
allowed for two worktrees to checkout the same branch.
You can override that restriction with `--force`.[1]

† 1: Naming override options just `--force` has some UX issues like
     discoverability and the fact that (in this case) it is used for
     multiple orthogonal things
Thanks. I just tried this, but I think it does not suffice. The --force
option is available to "git worktree add" to create a worktree for a
branch that is already checked out. But typically my workflow is to
create a worktree for a new feature branch, and there from that worktree
temporarily switch to an existing branch using `git checkout`, and there
I get a hard error (if another worktree has this branch) and there is no
--force option to override the worktree limitation at 'checkout' time. I
just tried to test whether worktrees created with --force would allow to
switch to checked-out-in-other-worktrees branches in the future, but
that does not appear to be the case.

quoted
I understand
why its designers felt that this would provide better guarantees (it
is not a good idea to mutate branch names that are checked out
somewhere else), but checking out various branches to test them and
inspect their code (before returning to the feature branch I am
actively working on) is a common part of my workflow.
I agree, that’s a great use of worktrees.  But I never feel like I have
to checkout the branch itself.  I detach on top of the branch.

I'm afraid `git checkout -d` is not part of my typical git workflow. I
could retrain myself to use it, when I get into a worktree error, but it
is cumbersome to know of this new complexity¹, and various things work
less well in detached state -- for example my bash prompt tells me in
which branch I am, and in detached state it only shows the commit hash.

¹: it would be nice if the fatal-error message on 'git checkout' when
trying to checkout a branch that is active on another worktree would
suggest using `git checkout -d` instead to proceed. I may try to send a
patch to add this information.
quoted
Getting a 'fatal
error' because some other, independent worktree also checked this
branch out is a hindrance.

Note: I don't know about the `worktree` implementation and whether the
[snip]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help