git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Eric Sunshine <sunshine@sunshineco.com>
To: "Robert P. J. Day" <rpjday@crashcourse.ca>
Cc: Git Mailing list <git@vger.kernel.org>
Subject: Re: some apparent inaccuracies in "man git-worktree"
Date: Tue, 14 Nov 2017 13:33:14 -0500	[thread overview]
Message-ID: <CAPig+cRc7Yqeys=oPEgPnyR4qT7qKYLbH1ifnp+6F6N+mSzNVA@mail.gmail.com> (raw)
In-Reply-To: <alpine.LFD.2.21.1711140324580.12112@localhost.localdomain>

On Tue, Nov 14, 2017 at 3:43 AM, Robert P. J. Day <rpjday@crashcourse.ca> wrote:
> from "man git-worktree", there seem to be some inaccuracies in the
> SYNOPSIS regarding the "add" subcommand:
>
>   git worktree add \
>     [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<branch>]
>
>   first, there's no mention of "-B" in that SYNOPSIS, even though it's
> explained further down the man page.

Omission of "-B" from the synopsis was intentional. From cbdf60fa18
(worktree: add -b/-B options, 2015-07-06):

    worktree: add -b/-B options

    One of git-worktree's roles is to populate the new worktree, much like
    git-checkout, and thus, for convenience, ought to support several of the
    same shortcuts. Toward this goal, add -b/-B options to create a new
    branch and check it out in the new worktree.

    (For brevity, only -b is mentioned in the synopsis; -B is omitted.)

Whether or not the omission was actually a good decision is
questionable. The thinking, at the time, may have been that users
already familiar with "-b" in 'git checkout' would likewise be
familiar with (and be able to infer) "-B", thus it wasn't important to
state its existence explicitly in the synopsis, which was already
getting lengthy. Of course, that decision does not assist newcomers,
so adding "-B" to the synopsis would help the page better stand on its
own.

>   next, the SYNOPSIS seems misleading as it doesn't make clear that
> the options -b, -B and --detach are mutually exclusive, which is made
> clear in the worktree.c source:
>
>     if (!!opts.detach + !!opts.new_branch + !!new_branch_force > 1)
>             die(_("-b, -B, and --detach are mutually exclusive"));

Failure to update the synopsis to indicate mutual exclusion appears to
be a simple oversight in ab0b2c53ed (worktree: make --detach mutually
exclusive with -b/-B, 2015-07-17) in response to:
https://public-inbox.org/git/55A8F4B1.9060304@drmicha.warpmail.net/

>   finally (and maybe i'm just not reading carefully enough), it's not
> clear what happens if you add a worktree at a given commit without
> specifying *any* of -b, -B or --detach. the obvious result should be a
> new worktree checked out at a detached HEAD and, interestingly, if i
> do that, then from the main tree, i see:
>
>   $ git worktree list
>   /home/rpjday/k/git   516fb7f2e73d [master]
>   /home/rpjday/k/temp  c470abd4fde4 (detached HEAD)
>   $
>
> but from within the worktree, if i ask for the status, i see only:
>
>   $ git status
>   Not currently on any branch.
>   nothing to commit, working tree clean
>   $
>
> where i would normally have expected to see "detached HEAD", is there
> a reason that's not displayed?

Someone more familiar with this bit can correct me if I'm wrong, but I
believe that the "HEAD detached at/from <branch>" you normally see
with 'git status' is derived from the reflog, and if it can't find the
information in the reflog, it instead shows the generic "Not currently
on any branch" (which is the equivalent of the "(detached HEAD)" you
see in "git worktree list").

Each worktree has its own newly-created reflog, which does _not_
contain enough information for 'git status' to present the more
detailed "detached" message, thus it falls back to the generic one.
Perhaps seeding the worktree's reflog with a bit more information at
creation time would be a good #leftoverbits task.

  reply	other threads:[~2017-11-14 18:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-14  8:43 some apparent inaccuracies in "man git-worktree" Robert P. J. Day
2017-11-14 18:33 ` Eric Sunshine [this message]
2017-11-14 20:10   ` Robert P. J. Day
2017-11-21 19:44     ` Jonathan Nieder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAPig+cRc7Yqeys=oPEgPnyR4qT7qKYLbH1ifnp+6F6N+mSzNVA@mail.gmail.com' \
    --to=sunshine@sunshineco.com \
    --cc=git@vger.kernel.org \
    --cc=rpjday@crashcourse.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).