git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jason Karns <jason.karns@gmail.com>
To: Igor Djordjevic <igor.d.djordjevic@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Bug: `git remote show <remote>` reports different HEAD branch than refs/remotes/<remote>/HEAD
Date: Tue, 15 Aug 2017 13:58:38 -0400	[thread overview]
Message-ID: <CAKNmmv3_rFNDDFVEeShAb3mEMOBL4z=oZXP8Df72D44stB_7BA@mail.gmail.com> (raw)
In-Reply-To: <bad7dafc-247c-bf5e-8cfd-5445badeef1c@gmail.com>

On Tue, Aug 15, 2017 at 1:09 PM, Igor Djordjevic
<igor.d.djordjevic@gmail.com> wrote:
> Hi Jason,
>
> On 15/08/2017 16:26, Jason Karns wrote:
>> I have a git repo that shows a different branch in
>> `.git/refs/remotes/origin/HEAD` than is reported by `git remote show
>> origin`.
>>
>> The branch is `github-rename` in refs/remotes/origin/HEAD, but shows
>> `master` in output of git-remote-show
>>
>> ```
>> $ cat .git/refs/remotes/origin/HEAD
>> ref: refs/remotes/origin/github-rename
>>
>> $ git remote show origin
>> * remote origin
>>   Fetch URL: git@XXXX.git
>>   Push  URL: git@XXXX.git
>>   HEAD branch: master
>>   Remote branches:
>>     github-rename     tracked
>>     master            tracked
>>     qa                tracked
>>     refactor-test     tracked
>>   Local branches configured for 'git pull':
>>     github-rename merges with remote github-rename
>>     master        merges with remote master
>>   Local refs configured for 'git push':
>>     github-rename pushes to github-rename (up to date)
>>     master        pushes to master        (up to date)
>> ```
>>
>> git version 2.14.1
>>
>>
>> Background:
>>
>> Prior to my repo being cloned, the default branch was configured to be
>> `some-random-branch` on github. My repo was cloned and the HEAD branch
>> was set to `some-random-branch` correctly (in `refs/`). However,
>> git-remote-show reported `master` as the HEAD branch.
>>
>> Later, `some-random-branch` was deleted from the remote. It _remained_
>> as the HEAD branch locally according to `refs/`.
>>
>> In order to test the remote-show command, I changed the HEAD branch to
>> a branch that actually existed by running `git remote set-head origin
>> github-rename`. It changed the HEAD branch in `refs/` but remote-show
>> continues to report `master` as the remote's HEAD.
>
> I am no expert here, but reading the docs, it seems like you may have
> wrong expectations.
>
> Documentation for "git remote set-head"[1] explains that this command
> is used to set default remote branch (locally), where later you can
> use remote name only to specify that specific (remote) branch instead.
>
> Example shows that for remote named "origin", if you set default
> branch name to "master" (actually being "origin/master" locally),
> then whenever you want to type "origin/master", you can type "origin"
> only instead (set default branch name is implied).
>
> For the given example, that is what you can see inside
> "refs/remotes/origin/HEAD", being set to "refs/remotes/origin/master".
>
> So it is something _you_ set _locally_ to aid you in working with the
> remote repository.


Cool, this is all to my expectations.

>
> On the other hand, what "git remote show" outputs for HEAD is a name
> of actually checked-out branch inside that remote repository - it`s
> what`s stored inside HEAD file of the remote repository root.
>
> So it is something set on the _remote_ end, you can`t influence it
> from your local repository.


So _this_ is not what I expected. Thanks for clarifying.

Considering that a fresh clone replicates the remote's default branch
as the local default for that remote, I wager (in the majority of
cases) that these two are the same. It would seem that what I would
like in this case is a feature change to git-remote-show to show both
the locally-configured and remote-configured defaults for the given
remote (similar in spirit to how git-remote-show already shows local
vs remote information: branches and their configurations for
push/pull).

Such a feature would be the "read" side of the remote set-head
command, and also be useful for highlighting cases where the local and
remote defaults do not match.

If I might suggest adding "Local default branch: xxx" to the
remote-show output, following the HEAD branch output. (Perhaps,
printing "(not set)" if the default isn't configured locally.)

````
$ git remote show origin | head
* remote origin
  Fetch URL: git@XXXX
  Push  URL: git@XXXX
  HEAD branch: develop
  Local default branch: foo
  Remote branches:
```

Or perhaps adding a line at the bottom with the other local refs. That
would allow additional notices when/if the local and remote defaults
differ.

>
> What you _could_ do in your specific case, as you mention using
> GitHub, is following their help page for "setting the default
> branch"[2] for your GitHub repository (which you track locally as
> "origin") to "github-rename".
>
> (in general, non-GitHub repository case, one could usually run there
> either `git checkout github-rename`, if it`s not a bare repository,
> or `git symbolic-ref HEAD refs/heads/github-rename`, if it`s a bare
> repository)
>
> Afterwards, running `git remote show origin` inside your local
> repository should output "github-rename" as HEAD value, as desired.
>

In my case, the github configuration is correct, and the set-head
command was only used to test the output of git-remote-show. The crux
of my misunderstanding is that I thought git-remote-show should be
reporting the contents of `refs/remotes/origin/HEAD`. Having that
information reported somehow (preferably through git-remote-show)
would have clarified this for me.


> p.s. To set your default remote branch locally to checked-out branch
> on the remote end automatically, you can use `git remote set-head
> origin --auto`, as documented[1]. It will inspect what`s inside
> "HEAD" of the remote named "origin", and update your local
> "refs/remotes/origin/HEAD" accordingly.
>
> [1] https://git-scm.com/docs/git-remote#git-remote-emset-headem
> [2] https://help.github.com/articles/setting-the-default-branch/
>
> Regards,
> Buga

Thanks for clarifying. Having this information surfaced a bit would be
a nice improvement, IMO.

Jason

  reply	other threads:[~2017-08-15 17:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-15 14:26 Bug: `git remote show <remote>` reports different HEAD branch than refs/remotes/<remote>/HEAD Jason Karns
2017-08-15 17:09 ` Igor Djordjevic
2017-08-15 17:58   ` Jason Karns [this message]
2017-08-15 21:59     ` Jeff King

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='CAKNmmv3_rFNDDFVEeShAb3mEMOBL4z=oZXP8Df72D44stB_7BA@mail.gmail.com' \
    --to=jason.karns@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=igor.d.djordjevic@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.
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).