From: Jeff King <peff@peff.net>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [RFC/PATCH] remote: add new sync command
Date: Fri, 11 Nov 2011 13:13:52 -0500 [thread overview]
Message-ID: <20111111181352.GA16055@sigill.intra.peff.net> (raw)
In-Reply-To: <CAMP44s2RjcFtdO2jft0Hg9RtqK-DRK47gX8By-dBFSBcSA+yFA@mail.gmail.com>
On Fri, Nov 11, 2011 at 02:30:48PM +0200, Felipe Contreras wrote:
> > Doesn't --all mean all refs, including tags and branches?
>
> Nope, only branches, try it. I also found it strange. And what is
> more, you can't use --all and --tags at the same time. Totally
> strange.
Yeah, you're right. Sorry for my confusion.
So in that sense, it is poorly named, and "--branches" (or "--heads")
would be more accurate. At the same time, it is probably more likely
what the user wants to do (you almost never want to push "refs/remotes",
for example). So I am a little hesitant to suggest changing it, even
with a warning and deprecation period.
> And yes, in this particular use-case that's what I am trying to avoid,
> but in other use-cases (like creating a new repo and pushing
> *everything*), a *true* --all would be nice.
Right. It looks like that is just spelled "--mirror" (which gives you
pruning also), or "refs/*:refs/*" (without pruning). The latter is even
more flexible, as you could do "refs/*:refs/foo/*" to keep several
related backups in one upstream repo.
Just to get back to the original patch for a second: are we in agreement
that what you want to do with "sync" is almost possible now (modulo a
separate --prune option), and that there is a separate issue of making
friendlier syntax for a few common refspecs?
> > We could add syntactic sugar to make
> > --branches mean "refs/heads/*". But I do worry that pseudo-options like
> > that just end up creating more confusion (I seem to recall there being a
> > lot of confusion about "--tags", which is more or less the same thing).
>
> But it's not, that could explain part of the confusion. I think these
> would be totally intuitive.
>
> --branches
> --tags
> --other
> --all
> --update
> --prune
My problem with them syntactically is that you have option-looking
things that are really not flags, but rather syntactic placeholders for
refspecs. So you have:
git push --prune remote --branches
which looks wrong from the perspective of usual option-parsing rules.
And does:
git push remote --prune --branches
work? Or:
git push --prune --branches remote
?
I think we could make them all work if we want. But somehow the syntaxes
just look wrong to me. Using a non-dashed placeholder for special
refspecs makes more sense to me like:
git push --prune remote BRANCHES
and then it really is just a special way of spelling "refs/heads/*". But
then, I also think it's good for users to understand that the options
are refspecs, and what that means. It's not a hard concept, and then
when they inevitably say "how can I do BRANCHES, except put the result
somewhere else in the remote namespace", it's a very natural extension
to learn about the right-hand side o the refspec.
Of course I also think BRANCHES looks ugly, and people should just learn
"refs/heads/*".
I dunno. Maybe my brain is fried from knowing too much about how git
works. I don't have much of an "ordinary user" perspective anymore.
> But what about 'git fetch'? You didn't comment anything. I think we
> should try to be consistent in these imaginary future options, maybe
> to devise a transition, or at least to identify good names for the new
> options.
Yeah, fetch makes it harder because the options may have subtly
different meanings. Using non-option placeholders would work around
that. You would still have options for pruning, which to me is not
really a refspec, but an option that acts on the refspecs.
>From the list in your previous email, you wrote:
> --prune -> rename to --prune-tracking?
> --prune-local (new; prune local branches that don't exist on the remote)
I think --prune wouldn't need renaming. If you fetch into tracking
branches, then pruning would prune tracking branches. If you fetch as a
mirror (refs/*:refs/*), then you would prune everything.
And "--prune-local" doesn't seem like a fetch operation to me. Either
you are mirroring, and --prune already handles it as above. Or you are
interested in getting rid of branches whose upstream has gone away. But
that's not a fetch operation; that's a branch operation.
-Peff
next prev parent reply other threads:[~2011-11-11 18:14 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-07 16:07 [RFC/PATCH] remote: add new sync command Felipe Contreras
2011-11-07 17:22 ` Jeff King
2011-11-07 18:35 ` Felipe Contreras
2011-11-07 18:39 ` Jeff King
2011-11-07 20:51 ` Felipe Contreras
2011-11-07 21:01 ` Jeff King
2011-11-07 21:25 ` Junio C Hamano
2011-11-07 21:31 ` Jeff King
2011-11-08 16:43 ` Felipe Contreras
2011-11-08 17:49 ` Junio C Hamano
2011-11-08 17:59 ` Felipe Contreras
2011-11-09 3:36 ` Junio C Hamano
2011-11-11 10:35 ` Jakub Narebski
2011-11-11 16:38 ` Junio C Hamano
2011-11-11 22:00 ` Jakub Narebski
2011-11-08 17:31 ` Felipe Contreras
2011-11-08 18:14 ` Jeff King
2011-11-11 12:30 ` Felipe Contreras
2011-11-11 18:13 ` Jeff King [this message]
2011-11-12 22:07 ` Felipe Contreras
2011-11-14 12:25 ` Jeff King
2011-11-14 13:57 ` Felipe Contreras
2011-11-21 21:44 ` Jeff King
2011-11-21 23:47 ` Felipe Contreras
2011-11-30 7:01 ` Jeff King
2011-11-30 11:47 ` Felipe Contreras
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=20111111181352.GA16055@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=felipe.contreras@gmail.com \
--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).