clone: write detached HEAD in bare repositories

If we don't write, HEAD is still at refs/heads/master as initialized
by init-db, which may or may not match remote's HEAD.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2012-01-16 16:46:08 +07:00
committed by Junio C Hamano
parent bafe763197
commit 7f08c6858e
2 changed files with 27 additions and 7 deletions

View File

@ -764,12 +764,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
} }
} else if (remote_head) { } else if (remote_head) {
/* Source had detached HEAD pointing somewhere. */ /* Source had detached HEAD pointing somewhere. */
if (!option_bare) { update_ref(reflog_msg.buf, "HEAD", remote_head->old_sha1,
update_ref(reflog_msg.buf, "HEAD", NULL, REF_NODEREF, DIE_ON_ERR);
remote_head->old_sha1, our_head_points_at = remote_head;
NULL, REF_NODEREF, DIE_ON_ERR);
our_head_points_at = remote_head;
}
} else { } else {
/* Nothing to checkout out */ /* Nothing to checkout out */
if (!option_no_checkout) if (!option_no_checkout)

View File

@ -12,7 +12,10 @@ test_expect_success setup '
cd src && cd src &&
>file && >file &&
git add file && git add file &&
git commit -m initial git commit -m initial &&
echo 1 >file &&
git add file &&
git commit -m updated
) )
' '
@ -88,6 +91,26 @@ test_expect_success 'clone --mirror' '
' '
test_expect_success 'clone --mirror with detached HEAD' '
( cd src && git checkout HEAD^ && git rev-parse HEAD >../expected ) &&
git clone --mirror src mirror.detached &&
( cd src && git checkout - ) &&
GIT_DIR=mirror.detached git rev-parse HEAD >actual &&
test_cmp expected actual
'
test_expect_success 'clone --bare with detached HEAD' '
( cd src && git checkout HEAD^ && git rev-parse HEAD >../expected ) &&
git clone --bare src bare.detached &&
( cd src && git checkout - ) &&
GIT_DIR=bare.detached git rev-parse HEAD >actual &&
test_cmp expected actual
'
test_expect_success 'clone --bare names the local repository <name>.git' ' test_expect_success 'clone --bare names the local repository <name>.git' '
git clone --bare src && git clone --bare src &&