Thread (5 messages) 5 messages, 5 authors, 2016-08-11

Re: git bug? + question

From: Junio C Hamano <hidden>
Date: 2016-08-11 19:40:39

Miles Bader [off-list ref] writes:
Also, a question:  Is there anyway to make git-clone use
--use-separate-remote by default?  I'm trying for a "lots of branches in
a single shared remote repository" style, and use-separate-remote seems
more sane for this usage.
This was suggested last week on the list, and I think it is a
sensible thing to do.

Karl Hasselström [off-list ref] writes:
On 2006-10-26 10:11:50 -0700, Linus Torvalds wrote:
quoted
But it's a good rule in general, just because it makes a certain
common workflow explicit. In fact, we really probably should start
to always use the "refs/remote/origin/HEAD" kind of syntax by
default, where you can't even _switch_ to the branch maintained in
the remote repository, because it's not a real branch locally.
Seconded. I really like having remote branches in their own namespace
where I can't confuse them with my local branches by mistake -- and
that the branches of different remotes end up in different separate
namespaces.
quoted
So normally you should consider the "origin" branch to be a pointer
to WHAT YOU FETCHED LAST - and that implies that you shouldn't
commit to it, because then it loses that meaning (now it's "what you
fetched last and then committed your own work on top of", which is
something totally different).
Defaulting to --use-separate-remotes would mean not having to explain
this to every single confused new user. :-)
The only downside that I can think of is that it affects me or
anybody who works on more than one machine on multiple branches
slightly negatively.

I know I keep "master" checked out on my secondary machines when
I am done working there, so the mapping origin:master,
maint:maint, next:next, and +pu:pu I get by default has been
easy for me to work on.  With the current layout, updating and
building four variants can be done with:

	git pull
        for b in master maint next pu
        do
        	git checkout $b && make || break
	done

which is efficient (guaranteed to do only one fetch from remote)
and convenient.  Also I have Push: mapping set up on my
main machine to do master:origin, next:next, maint:maint, and
+pu:pu so that I can replace the first "git pull" on the
secondary machine with "git push secondary" on my main machine.

With separate remotes, I'd need something like:

	for b in master maint next pu
        do
        	git checkout $b && git pull && make || break
	done

And I also would need to have per-branch configuration to merge
from ". remotes/origin/$b" without re-fetching while on a
non-master branch $b, for the above to work.  I still need to
remember to process "master" first, so all things considered,
this is a regression in usability for my workflow.

But that is probably a minor inconvenience to a minority.  Most
of the world follow others' repositories that have a single
primary head, and defaulting to use separate-remote would help
them a lot.

So I am in favor of the change, but this is not something we can
do in a flag-day fashion.  We would probably need updating the
tutorial and the documentation first.



Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help