diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2012-01-16 16:46:08 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-16 16:26:24 -0800 |
commit | 7f08c6858ecfdf29f9713cf3a0b3699192f01a94 (patch) | |
tree | bf7099993b8f41f52ad0c81f9468e6f192a0ca6c | |
parent | bafe763197cb6535e5b4956ffeaa4e26ebb10651 (diff) | |
download | git-7f08c6858ecfdf29f9713cf3a0b3699192f01a94.tar.gz git-7f08c6858ecfdf29f9713cf3a0b3699192f01a94.tar.xz |
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>
-rw-r--r-- | builtin/clone.c | 9 | ||||
-rwxr-xr-x | t/t5601-clone.sh | 25 |
2 files changed, 27 insertions, 7 deletions
diff --git a/builtin/clone.c b/builtin/clone.c index 9dcc5fe77..91862f796 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -764,12 +764,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) } } else if (remote_head) { /* Source had detached HEAD pointing somewhere. */ - if (!option_bare) { - update_ref(reflog_msg.buf, "HEAD", - remote_head->old_sha1, - NULL, REF_NODEREF, DIE_ON_ERR); - our_head_points_at = remote_head; - } + update_ref(reflog_msg.buf, "HEAD", remote_head->old_sha1, + NULL, REF_NODEREF, DIE_ON_ERR); + our_head_points_at = remote_head; } else { /* Nothing to checkout out */ if (!option_no_checkout) diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh index 49821eb46..e0b8db6c5 100755 --- a/t/t5601-clone.sh +++ b/t/t5601-clone.sh @@ -12,7 +12,10 @@ test_expect_success setup ' cd src && >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' ' git clone --bare src && |