git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: BUG: git request-pull broken for plain branches

From
Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date
Jun 25, 2014, 13:21 UTC
Message-ID
<20140625132131.GO14781@pengutronix.de>
In-Reply-To
<CA+55aFwZb7tT7xb7y2XJpzcmrxB=Rf--bjz5XbBcxC-7MMm9eg@mail.gmail.com>
Hello Linus,
On Wed, Jun 25, 2014 at 05:05:51AM -0700, Linus Torvalds wrote:
Show 33 quoted lines
> On Wed, Jun 25, 2014 at 2:55 AM, Uwe Kleine-König
> <u.kleine-koenig@pengutronix.de> wrote:
> >
> >         $ git rev-parse HEAD
> >         9e065e4a5a58308f1a0da4bb80b830929dfa90b3
> >         $ git ls-remote origin | grep 9e065e4a5a58308f1a0da4bb80b830929dfa90b3
> >         9e065e4a5a58308f1a0da4bb80b830929dfa90b3        refs/heads/ukl/for-mainline
> >         $ git request-pull origin/master origin HEAD > /dev/null
> >         warn: No match for commit 9e065e4a5a58308f1a0da4bb80b830929dfa90b3 found at origin
> >         warn: Are you sure you pushed 'HEAD' there?
> 
> Notice how "HEAD" does not match.
> 
> The error message is perhaps misleading. It's not enough to match the
> commit. You need to match the branch name too. git used to guess the
> branch name (from the commit), and it often guessed wrongly. So now
> they need to match.
> 
> So you should do
> 
>     git request-pull origin/master origin ukl/for-mainline
> 
> to let request-pull know that you're requesting a pull for "ukl/for-mainline".
> 
> If you have another name for that branch locally (ie you did something
> like "git push origin local:remote"), then you can say
> 
>     git request-pull origin/master origin local-name:remote-name
> 
> to specify what the branch to be pulled is called locally vs remotely.
> 
> In other words, what used to be "pick some branch randomly" is now
> "you need to _specify_ the branch".

ah, got it. Still some of my concerns stay valid and I also have some new ones:

 - if there is a branch and a tag on the remote side that match what I
   specified the outcome depends on the order of git-ls-remote. (minor
   nit.)
 - if I have to specify the remote name now, why do I have to also
   specify my local ref? Isn't the respective $sha1 of the remote side
   enough to do what is needed?
 - Isn't $found = $sha1; silly because I cannot pull a rev, only a ref?
   (side note:
   	git pull linus d91d66e88ea95b6dd21958834414009614385153
   gives no error message, only returns 1 and does nothing else.)
 - Is the result of
 	git request-pull $somecommit origin
   what is intended? For me it does
   	...
	are available in the git repository at:
	  $repository
	for you to fetch changes ...
   if the remote HEAD matches the local one. I'd prefer to have an
   explicit branch name there, or at least HEAD.

I liked git guessing the branch name, maybe we can teach it to guess a bit better than it did before 2.0? Something like:

 - if there is a unique match on the remote side, use it.
 - if there are >= 1 match on the remote side and exactly one matches
   what I specified as <end>, use it.
 - if there are >= 1 match on the remote side and exactly one of them is
   a tag, use the tag
 - if there are two matches on the remote side, and one is "HEAD",
   pick the other one.

Best regards Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Previous: Linus TorvaldsNext: Junio C Hamano
Message 3 of 5 in “BUG: git request-pull broken for plain branches”
  1. Uwe Kleine-KönigJun 25, 2014
  2. Linus TorvaldsJun 25, 2014
  3. Uwe Kleine-KönigJun 25, 2014
  4. Junio C HamanoJun 25, 2014
  5. Uwe Kleine-KönigJun 26, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.