Re: efficient cloning
- From
Junio C Hamano <junkio@cox.net>
- Date
- Mar 20, 2006, 23:04 UTC
- Message-ID
- <7voe00iupp.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <200603201730.19373.Josef.Weidendorfer@gmx.de>
Josef Weidendorfer <Josef.Weidendorfer@gmx.de> writes:
Show 10 quoted lines
> On Monday 20 March 2006 09:54, you wrote: >> * A new flag --use-separate-remote stops contaminating local >> branch namespace by upstream branch names. The upstream >> branch heads are copied in .git/refs/remotes/ instead of > > Shouldn't this be .git/refs/remotes/origin/? > Ie. different namespaces for different remotes? > > Linus wanted to still be able to say "origin" which automatically > would map to "remotes/origin/master", where the name of the remote
I do not remember that, but even if he said something similar to that, I suspect it would not be "map remotes/origin/master to origin", but "origin could mean remotes/origin when origin is the unique tail-name anywhere under refs/".
I think what is reasonable is something like this:
- If you start from a repository cloned in the traditional way, the upstream "master" is kept track of with your "origin", so "diff origin master" would be "my changes on top of the upstream".
- If your repository was cloned with --use-separate-remote, the upstream "master" is refs/remotes/master, so the same diff can be had with "diff remotes/master master".
- Regardless of how you started your cloned repository, with an
$GIT_DIR/{remotes,refs/heads,refs/remotes} editor I hinted in
a separate message, you can rearrange things to organize the
refs/ hierarchy any way you want. - You could for example arrange to track my "master" as
refs/heads/origin and all the other branch heads under
refs/remotes/junkio/ (or not even track my other branches
if you are not interested). Then the same diff can be had
with "diff origin master". - You could for example arrange to track all my branches in
refs/remotes/junkio/, and if git-pasky were still alive,
Pasky's branches in refs/remotes/pasky. If we had a "take
the unique tail-name anywhere under refs/" logic, the same
diff can be had with "diff junkio/master master".So I think two things that would be nice to have on top of what we have are (1) the said "remotes-and-refs editor" [*1*], and (2) a change to sha1_name.c to look for places other than built-in tags/ and heads/ under refs/ to find a unique tail-match.
Since I do not do Porcelain, (2) would obviously be the next thing for me to work on on this topic. I should also address "Ouch I did not realize I have given the same name to a tag and a branch" warning issue while doing so.
[Footnote]
*1* ... which currently I do not plan to do myself unless I have absolutely nothing else to do and really bored. A sound of huge hint dropping ;-).