From: Thomas Rast <trast@student.ethz.ch>
To: <git@vger.kernel.org>
Subject: Re: [PATCH] pull: refuse complete src:dst fetchspec arguments
Date: Sun, 15 Nov 2009 13:24:03 +0100 [thread overview]
Message-ID: <200911151324.05109.trast@student.ethz.ch> (raw)
In-Reply-To: <d561e70f0aa802ceb96eba16d3bb2316134d69c8.1256062808.git.trast@student.ethz.ch>
Thomas Rast wrote:
> git-pull has historically accepted full fetchspecs, meaning that you
> could do
>
> git pull $repo A:B
>
> which would simultaneously fetch the remote branch A into the local
> branch B and merge B into HEAD. This got especially confusing if B
> was checked out. New users variously mistook pull for fetch or read
> that command as "merge the remote A into my B", neither of which is
> correct.
It gets worse. *Much* worse.
Yesterday on IRC I helped 'thrope' with the github pull requests
guide. This is a wiki page, but placed at a sufficiently prominent
URL to make it look like an authoritative guide to a new user.
http://github.com/guides/pull-requests
I have since replaced the part in question with one that is more in
line with what the tools actually do, but the bottom line of the old
version was basically
# You got a request to pull git://github.com/defunkt/grit.git master
# mojombo can add the defunkt repository as a remote source, create
# a new branch, and pull the defunkt repository contents into it
# like this:
$ git remote add -f defunkt git://github.com/defunkt/grit.git
$ git checkout -b defunkt/master # (1)
$ git pull defunkt master:4f0ea0c # (2)
# [...]
$ git commit # (3)
$ git checkout master
$ git merge defunkt/master # (4)
$ git push
Note that all but the first line and the numbers is literally
cut&pasted from the old version, which is still available at
http://github.com/guides/pull-requests/24
so you can see for yourself. Note that the lines (1) and (2) were
there even in version 3.
And as you can see, there are just so many things wrong with it:
(1) will actually create a new branch defunkt/master based on whatever
you happened to be on, making (4) merge something entirely different
than what the pull request was for.
(2) will pull defunkt's master into a local *branch* called 4f0ea0c
(in the guide this is actually the sha1 of defunkt's master, but who
knows), and then merge that into the local defunkt/master branch from
(1).
(3) shouldn't do anything at that point, but hell if I know how he got
the idea to commit there.
So this suggests several safety measures:
* Perhaps branch/checkout -b can refuse to create branches that
already exist with this exact name under remotes if that's the only
argument. I.e., in the above situation (1),
# refuse: remotes/defunkt/master exists
git checkout -b defunkt/master
git branch defunkt/master
# accept: obviously you're asking for trouble explicitly
git checkout -b defunkt/master defunkt/master
git branch defunkt/master defunkt/master
* Perhaps all branch-creating code could refuse to create branches
that have a name that is also a valid sha1 prefix of an existing
object? This would be fairly drastic if a user's language has many
words consisting only of [a-f], but on the other hand, the user can
hardly be helped by having something that looks like a sha1 resolve
to some *other* sha1.
* I ask you to reconsider this patch. For some reason, people read
things into pull with fetchspecs that are far from correct.
I haven't thought much about backwards compatibility yet, though, so
some of it may not be possible.
--
Thomas Rast
trast@{inf,student}.ethz.ch
next prev parent reply other threads:[~2009-11-15 12:24 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-20 18:23 [PATCH] pull: refuse complete src:dst fetchspec arguments Thomas Rast
2009-10-20 18:37 ` [RFC! PATCH] " Thomas Rast
2009-10-20 19:29 ` [PATCH] " Wesley J. Landaker
2009-10-20 20:30 ` Sean Estabrooks
2009-10-20 21:11 ` Junio C Hamano
2009-10-21 0:15 ` Daniel Barkalow
2009-10-21 0:29 ` Sean Estabrooks
2009-10-21 0:55 ` Daniel Barkalow
2009-10-21 1:35 ` Sean Estabrooks
2009-10-21 3:15 ` Björn Steinbrink
2009-10-21 4:32 ` Daniel Barkalow
2009-10-21 8:05 ` Thomas Rast
2009-10-23 2:54 ` Jeff King
2009-10-23 3:43 ` Daniel Barkalow
2009-10-24 0:49 ` Jeff King
2009-10-24 1:22 ` Junio C Hamano
2009-10-21 8:06 ` Thomas Rast
2009-11-15 12:24 ` Thomas Rast [this message]
2009-11-15 20:22 ` Junio C Hamano
2009-12-29 11:05 ` Nanako Shiraishi
2009-12-29 16:58 ` Junio C Hamano
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=200911151324.05109.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=git@vger.kernel.org \
/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 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 NNTP newsgroup(s).