From: "Björn Steinbrink" <B.Steinbrink@gmx.de>
To: "Kirill A. Korinskiy" <catap@catap.ru>
Cc: gitster@pobox.com, git@vger.kernel.org
Subject: Re: [PATCH] Add option -b/--branch to clone for select a new HEAD
Date: Wed, 26 Aug 2009 14:16:00 +0200 [thread overview]
Message-ID: <20090826121600.GA29098@atjola.homenet> (raw)
In-Reply-To: <87ljl694fd.wl%catap@catap.ru>
On 2009.08.26 15:53:58 +0400, Kirill A. Korinskiy wrote:
> At Wed, 26 Aug 2009 00:36:37 +0200,
> Björn Steinbrink <B.Steinbrink@gmx.de> wrote:
>
>
> > > @@ -518,7 +521,21 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
> > >
> > > mapped_refs = write_remote_refs(refs, refspec, reflog_msg.buf);
> > >
> > > - remote_head = find_ref_by_name(refs, "HEAD");
> > > + if (option_branch) {
> > > + strbuf_addf(&branch_head, "%s%s", src_ref_prefix, option_branch);
> > > +
> > > + remote_head = find_ref_by_name(refs, branch_head.buf);
> > > + }
> > > +
> > > + if (!remote_head) {
> > > + if (option_branch)
> > > + warning("Remote branch %s not found in upstream %s"
> > > + ", using HEAD instead",
> > > + option_branch, option_origin);
> > > +
> > > + remote_head = find_ref_by_name(refs, "HEAD");
> > > + }
> > > +
> > > head_points_at = guess_remote_head(remote_head, mapped_refs, 0);
> >
> > This would still pick refs/heads/master if refs/heads/master and
> > refs/heads/<branch> reference the same commit. That's due to the check
> > in guess_remote_head() which prefers refs/heads/master over all other
> > refs. While this is acceptable for the HEAD lookup, I'd treat that as a
> > bug for this new option.
> >
>
> My english is not a good and I don't understand it, sorry.
guess_remote_head() compares the object ids from remote_head and all of
the remote's refs to guess which is the right one.
Let's say that the repo has:
refs/heads/master: object1
refs/heads/foo: object2
refs/heads/bar: object1
If you do "git clone -b foo ...", then remote_head->old_sha1 will be
"object2". guess_remote_head() compares that to all the remote heads. In
this case, it will find refs/heads/foo (as expected).
But when you do "git clone -b bar", then remote_head->old_sha1 will be
"object1". And guess_remote_head() will then take refs/heads/master,
as it prefers that one.
doener@atjola:h $ mkdir a; cd a; git init
Initialized empty Git repository in /home/doener/h/a/.git/
doener@atjola:a (master) $ git commit --allow-empty -m init
[master (root-commit) a7a0b54] init
doener@atjola:a (master) $ git branch bar
doener@atjola:a (master) $ git checkout -b foo
Switched to a new branch 'foo'
doener@atjola:a (foo) $ git commit --allow-empty -m on_foo
[foo 375047e] on_foo
doener@atjola:a (foo) $ cd ..
doener@atjola:h $ (git clone -b foo a foo; cd foo; git branch)
Initialized empty Git repository in /home/doener/h/foo/.git/
* foo
doener@atjola:h $ (git clone -b bar a bar; cd bar; git branch)
Initialized empty Git repository in /home/doener/h/bar/.git/
* master
That said, I actually wonder why you don't simple set HEAD in the
original repo so that you get whichever branch you want by default
anyway.
Björn
next prev parent reply other threads:[~2009-08-26 12:16 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87praj90n8.wl%catap@catap.ru>
2009-08-25 19:25 ` [PATCH] Add option -b/--branch to clone for select a new HEAD Kirill A. Korinskiy
2009-08-25 19:27 ` Kirill A. Korinskiy
2009-08-25 21:57 ` Jeff King
2009-08-25 22:42 ` Junio C Hamano
2009-08-25 22:36 ` Björn Steinbrink
[not found] ` <87ljl694fd.wl%catap@catap.ru>
2009-08-26 12:16 ` Björn Steinbrink [this message]
2009-08-26 14:46 ` Kirill A. Korinskiy
2009-08-26 15:50 ` Björn Steinbrink
2009-08-26 16:10 ` Jeff King
2009-08-26 16:56 ` Björn Steinbrink
2009-08-26 17:48 ` Jeff King
2009-08-26 19:05 ` Jeff King
2009-08-28 10:31 ` Tor Arne Vestbø
2009-08-28 11:05 ` Martin Langhoff
2009-08-28 12:10 ` Julian Phillips
2009-08-24 20:42 Kirill A. Korinskiy
2009-08-25 1:57 ` Jeff King
2009-08-25 2:13 ` Junio C Hamano
2009-08-25 17:20 ` Kirill A. Korinskiy
2009-08-25 19:00 ` Jeff King
2009-08-25 12:30 ` Kirill A. Korinskiy
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=20090826121600.GA29098@atjola.homenet \
--to=b.steinbrink@gmx.de \
--cc=catap@catap.ru \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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).