From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Stefan Beller <sbeller@google.com>
Cc: git <git@vger.kernel.org>, "Junio C Hamano" <gitster@pobox.com>,
"Jeff King" <peff@peff.net>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Thomas Gummerer" <t.gummerer@gmail.com>,
"Eric Sunshine" <sunshine@sunshineco.com>
Subject: Re: [PATCH v4 9/9] checkout & worktree: introduce checkout.defaultRemote
Date: Fri, 01 Jun 2018 11:47:32 +0200 [thread overview]
Message-ID: <874limale3.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <CAGZ79kZKaZq+bqFTwe+Y3FU-1DHPjzNrvMNU=DM10EyOXxZJVw@mail.gmail.com>
On Thu, May 31 2018, Stefan Beller wrote:
> Hi Ævar,
>
> Sorry for chiming in late. I have a couple of thoughts:
>
>> (
>> cd /tmp &&
>> rm -rf tbdiff &&
>> git clone git@github.com:trast/tbdiff.git &&
>> cd tbdiff &&
>> git branch -m topic &&
>> git checkout master
>> )
>>
>> That will output:
>>
>> Branch 'master' set up to track remote branch 'master' from 'origin'.
>> Switched to a new branch 'master'
>
> I thought master is already there after the clone operation and
> you'd merely switch back to the local branch that was created at
> clone time?
>
> $ git clone git@github.com:trast/tbdiff.git && cd tbdiff
> $ git branch
> * master
> $ cat .git/config
> ...
> [branch "master"]
> remote = origin
> merge = refs/heads/master
>
> But the observation is right, we get that message. When do we
> do the setup for the master branch specifically?
What you're missing is this part:
git branch -m topic
I.e. we clone the repo, and have a "master" branch, we then rename
"master" to "topic", now there's no local master branch. Then we
checkout master either with only one remote or two.
>>
>> But as soon as a new remote is added (e.g. just to inspect something
>> from someone else) the DWIMery goes away:
>>
>> (
>> cd /tmp &&
>> rm -rf tbdiff &&
>> git clone git@github.com:trast/tbdiff.git &&
>> cd tbdiff &&
>> git branch -m topic &&
>> git remote add avar git@github.com:avar/tbdiff.git &&
>> git fetch avar &&
>> git checkout master
>> )
>>
>> Will output (without the advice output added earlier in this series):
>>
>> error: pathspec 'master' did not match any file(s) known to git.
>>
>> The new checkout.defaultRemote config allows me to say that whenever
>> that ambiguity comes up I'd like to prefer "origin", and it'll still
>> work as though the only remote I had was "origin".
>>
>> Also adjust the advice.checkoutAmbiguousRemoteBranchName message to
>> mention this new config setting to the user, the full output on my
>> git.git is now (the last paragraph is new):
>>
>> $ ./git --exec-path=$PWD checkout master
>> error: pathspec 'master' did not match any file(s) known to git.
>> hint: The argument 'master' matched more than one remote tracking branch.
>> hint: We found 26 remotes with a reference that matched. So we fell back
>> hint: on trying to resolve the argument as a path, but failed there too!
>> hint:
>> hint: Perhaps you meant fully qualify the branch name? E.g. origin/<name>
>
> s/meant fully/meant to fully/
> s/? E.g./?\nFor example/
Thanks, will fix.
>> hint: instead of <name>?
>
> In builtin/submodule--helper.c there is get_default_remote() which also
> hardcodes "origin". I think that is a safe thing to do.
>
>> hint:
>> hint: If you'd like to always have checkouts of 'master' prefer one remote,
>> hint: e.g. the 'origin' remote, consider setting checkout.defaultRemote=origin
>> hint: in your config. See the 'git-config' manual page for details.
>
> his new setting elevates one remote over all others, which may
> be enough for most setups and not confusing, too.
> Consider the following:
>
> git clone https://kernel.googlesource.com/pub/scm/git/git && cd git
> git remote add gitster https://github.com/gitster/git
> git remote add interesting-patches https://github.com/avar/git
> git remote add my-github https://github.com/stefanbeller/git
>
> git checkout master
>
> This probably means I want to have origin/master (from kernel.org)
>
> git checkout ab/checkout-implicit-remote
>
> This probably wants to have it from gitster/ (as it is not found on kernel.org);
> I am not sure if it would want to look at interesting-patches/ that mirrors
> github, but probably if it were not to be found at gitster.
>
> So maybe we rather want a setup to give a defined priority for
> the search order:
>
> git config dwim.remoteSearchOrder origin gitster avar
>
> Stepping back a bit, there is already an order in the config file
> for the remotes, and that order is used for example for 'fetch --all'.
>
> I wonder if we want to take that order? (Or are the days of hand
> editing the config over and this is too arcane? We would need a
> config command to re order remotes). Then we could just have a
> boolean switch to use the config order on ambiguity.
> Although you might want to have a different order for fetching
> and looking for the right checkout.
I thought about this use-case, and if we want this in the future I think
the most straightforward way is not to invent some new search order
variable, but just make use of git config allowing multi-values, i.e.:
[checkout]
defaultRemote = origin
defaultRemote = gitster
Although I'm not interested in implementing that now, and unlike just
having one special remote I don't think it's of interest to the vast
majority of git users.
>> I considered splitting this into checkout.defaultRemote and
>> worktree.defaultRemote, but it's probably less confusing to break our
>> own rules that anything shared between config should live in core.*
>> than have two config settings, and I couldn't come up with a short
>> name under core.* that made sense (core.defaultRemoteForCheckout?).
>
> core.dwimRemote ? It's a bit cryptic, though.
Covered by Eric's reply in
<CAPig+cSk9Dt3ZLQRjWwpxqMyP3npu3KbEQxkNfjV5RxRtro82Q@mail.gmail.com>
>> See also 70c9ac2f19 ("DWIM "git checkout frotz" to "git checkout -b
>> frotz origin/frotz"", 2009-10-18) which introduced this DWIM feature
>> to begin with, and 4e85333197 ("worktree: make add <path> <branch>
>> dwim", 2017-11-26) which added it to git-worktree.
next prev parent reply other threads:[~2018-06-01 9:47 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-02 10:54 [PATCH] checkout & worktree: introduce a core.DWIMRemote setting Ævar Arnfjörð Bjarmason
2018-05-02 15:21 ` Duy Nguyen
2018-05-02 18:00 ` Eric Sunshine
2018-05-02 18:09 ` Duy Nguyen
2018-05-02 18:25 ` Ævar Arnfjörð Bjarmason
2018-05-03 13:18 ` [PATCH v2] checkout & worktree: introduce checkout.implicitRemote Ævar Arnfjörð Bjarmason
2018-05-03 15:14 ` Duy Nguyen
2018-05-04 7:54 ` Ævar Arnfjörð Bjarmason
2018-05-04 14:58 ` Duy Nguyen
2018-05-04 18:02 ` Ævar Arnfjörð Bjarmason
2018-05-04 9:58 ` Eric Sunshine
2018-05-24 19:47 ` [PATCH v3] " Ævar Arnfjörð Bjarmason
2018-05-25 8:12 ` Junio C Hamano
2018-05-25 14:42 ` Duy Nguyen
2018-05-25 18:38 ` Ævar Arnfjörð Bjarmason
2018-05-26 12:49 ` Duy Nguyen
2018-05-31 7:45 ` Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 0/9] ambiguous checkout UI & checkout.defaultRemote Ævar Arnfjörð Bjarmason
2018-06-01 21:10 ` [PATCH v5 0/8] " Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 " Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 " Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 1/8] checkout tests: index should be clean after dwim checkout Ævar Arnfjörð Bjarmason
2018-06-05 15:45 ` SZEDER Gábor
2018-07-27 17:48 ` [PATCH] tests: make use of the test_must_be_empty function Ævar Arnfjörð Bjarmason
2018-07-27 21:50 ` Junio C Hamano
2018-07-31 0:17 ` SZEDER Gábor
2018-08-22 17:48 ` [PATCH] t6018-rev-list-glob: fix 'empty stdin' test SZEDER Gábor
2018-08-22 17:53 ` Eric Sunshine
2018-08-22 18:59 ` SZEDER Gábor
2018-08-22 20:30 ` Eric Sunshine
2018-08-22 18:01 ` Junio C Hamano
2018-08-22 18:50 ` Junio C Hamano
2018-08-22 19:23 ` Jeff King
2018-08-22 19:50 ` [PATCH] rev-list: make empty --stdin not an error Jeff King
2018-08-22 20:42 ` Junio C Hamano
2018-08-22 21:37 ` Jeff King
2018-08-22 21:50 ` Junio C Hamano
2018-08-22 21:55 ` Jeff King
2018-08-22 21:41 ` Junio C Hamano
2018-06-05 14:40 ` [PATCH v7 2/8] checkout.h: wrap the arguments to unique_tracking_name() Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 3/8] checkout.c: introduce an *_INIT macro Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 4/8] checkout.c: change "unique" member to "num_matches" Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 5/8] checkout: pass the "num_matches" up to callers Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 6/8] builtin/checkout.c: use "ret" variable for return Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 7/8] checkout: add advice for ambiguous "checkout <branch>" Ævar Arnfjörð Bjarmason
2018-06-05 14:40 ` [PATCH v7 8/8] checkout & worktree: introduce checkout.defaultRemote Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 1/8] checkout tests: index should be clean after dwim checkout Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 2/8] checkout.h: wrap the arguments to unique_tracking_name() Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 3/8] checkout.c: introduce an *_INIT macro Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 4/8] checkout.c]: change "unique" member to "num_matches" Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 5/8] checkout: pass the "num_matches" up to callers Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 6/8] builtin/checkout.c: use "ret" variable for return Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 7/8] checkout: add advice for ambiguous "checkout <branch>" Ævar Arnfjörð Bjarmason
2018-06-02 11:50 ` [PATCH v6 8/8] checkout & worktree: introduce checkout.defaultRemote Ævar Arnfjörð Bjarmason
2018-06-03 7:58 ` Eric Sunshine
2018-06-01 21:10 ` [PATCH v5 1/8] checkout tests: index should be clean after dwim checkout Ævar Arnfjörð Bjarmason
2018-06-01 21:10 ` [PATCH v5 2/8] checkout.h: wrap the arguments to unique_tracking_name() Ævar Arnfjörð Bjarmason
2018-06-01 21:10 ` [PATCH v5 3/8] checkout.[ch]: introduce an *_INIT macro Ævar Arnfjörð Bjarmason
2018-06-01 22:40 ` Eric Sunshine
2018-06-01 21:10 ` [PATCH v5 4/8] checkout.[ch]: change "unique" member to "num_matches" Ævar Arnfjörð Bjarmason
2018-06-01 22:41 ` Eric Sunshine
2018-06-01 21:10 ` [PATCH v5 5/8] checkout: pass the "num_matches" up to callers Ævar Arnfjörð Bjarmason
2018-06-01 21:10 ` [PATCH v5 6/8] builtin/checkout.c: use "ret" variable for return Ævar Arnfjörð Bjarmason
2018-06-01 21:10 ` [PATCH v5 7/8] checkout: add advice for ambiguous "checkout <branch>" Ævar Arnfjörð Bjarmason
2018-06-01 22:52 ` Eric Sunshine
2018-06-01 21:10 ` [PATCH v5 8/8] checkout & worktree: introduce checkout.defaultRemote Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 1/9] checkout tests: index should be clean after dwim checkout Ævar Arnfjörð Bjarmason
2018-06-01 4:06 ` Junio C Hamano
2018-06-01 19:43 ` Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 2/9] checkout.h: wrap the arguments to unique_tracking_name() Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 3/9] checkout.[ch]: move struct declaration into *.h Ævar Arnfjörð Bjarmason
2018-05-31 21:45 ` Thomas Gummerer
2018-06-01 2:14 ` Junio C Hamano
2018-06-01 9:56 ` Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 4/9] checkout.[ch]: introduce an *_INIT macro Ævar Arnfjörð Bjarmason
2018-06-01 4:16 ` Junio C Hamano
2018-05-31 19:52 ` [PATCH v4 5/9] checkout.[ch]: change "unique" member to "num_matches" Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 6/9] checkout: pass the "num_matches" up to callers Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 7/9] builtin/checkout.c: use "ret" variable for return Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 8/9] checkout: add advice for ambiguous "checkout <branch>" Ævar Arnfjörð Bjarmason
2018-06-01 4:32 ` Junio C Hamano
2018-06-01 5:11 ` Junio C Hamano
2018-06-01 9:54 ` Ævar Arnfjörð Bjarmason
2018-06-04 1:58 ` Junio C Hamano
2018-06-01 9:50 ` Ævar Arnfjörð Bjarmason
2018-06-01 7:53 ` Eric Sunshine
2018-06-01 19:59 ` Ævar Arnfjörð Bjarmason
2018-05-31 19:52 ` [PATCH v4 9/9] checkout & worktree: introduce checkout.defaultRemote Ævar Arnfjörð Bjarmason
2018-05-31 21:49 ` Stefan Beller
2018-06-01 8:04 ` Eric Sunshine
2018-06-01 9:47 ` Ævar Arnfjörð Bjarmason [this message]
2018-05-31 22:22 ` Thomas Gummerer
2018-06-01 2:17 ` Junio C Hamano
2018-05-04 7:14 ` [PATCH] checkout & worktree: introduce a core.DWIMRemote setting Eric Sunshine
2018-05-04 7:23 ` Eric Sunshine
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874limale3.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
--cc=sunshine@sunshineco.com \
--cc=t.gummerer@gmail.com \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.