Re: [PATCH v3 0/2] worktree: Support `--orphan` when creating new worktrees
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Nov 16, 2022, 00:39 UTC
- Message-ID
- <CAPig+cTTn764ObHJuw8epOtBdTUwocVRV=tLieCa4zf-PGCegw@mail.gmail.com>
- In-Reply-To
- <20221110233137.10414-1-jacobabel@nullpo.dev>
On Thu, Nov 10, 2022 at 6:32 PM Jacob Abel <jacobabel@nullpo.dev> wrote:
Show 8 quoted lines
> While working with the worktree based git workflow, I realised that setting > up a new git repository required switching between the traditional and > worktree based workflows. Searching online I found a SO answer [1] which > seemed to support this and which indicated that adding support for this should > not be technically difficult. > > * adding orphan branch functionality (as is present in `git-switch`) > to `git-worktree-add`
I haven't had a chance yet to read v3, but can we take a step back for a moment and look at this topic from a slightly different angle? Setting aside the value of adding --orphan to `git worktree add` (which, I'm perfectly fine with, as mentioned earlier), I have a question about whether the solution proposed by this series is the best we can do.
As I understand it, the actual problem this series wants to solve is that it's not possible to create a new worktree from an empty bare repository; for instance:
% git init --bare foo.git
% git -C foo.git worktree add -b main bar
Preparing worktree (new branch 'main')
fatal: not a valid object name: 'HEAD'
%This series addresses that shortcoming by adding --orphan, so that the following works:
% git init --bare foo.git
% git -C foo.git worktree add --orphan main bar
Preparing worktree (new branch 'main')
%However, is this really the best and most user-friendly and most discoverable solution? Is it likely that users are somehow going to instinctively use --orphan when they see the "fatal: not a valid object name: 'HEAD'" error message?
Wouldn't a better solution be to somehow fix `git worktree add -b <branch>` so that it just works rather than erroring out? I haven't delved into the implementation to determine if this is possible, but if it is, it seems a far superior "fix" for the problem shown above since it requires no extra effort on the user's part, and doesn't raise any discoverability red-flags (since nothing needs to be "discovered" if `-b <branch>` works as expected in the first place).
If fixing `-b <branch>` to "just work" is possible, then --orphan is no longer a needed workaround but becomes "icing on the cake".
Show 5 quoted lines
> Changes from v2: > > * Changed orphan creation behavior to match `git switch --orphan` instead of > `git checkout --orphan` [2][3]. As a result `--orphan` no longer accepts a > `<commit-ish>` and creates the orphan branch with a clean working directory.
Thanks for making this change.