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/ |