提交 1d0fa898 编写于 作者: N Nguyễn Thái Ngọc Duy 提交者: Junio C Hamano

checkout: add --ignore-other-wortrees

Noticed-by: NMark Levedahl <mlevedahl@gmail.com>
Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 10f102be
...@@ -232,6 +232,12 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode. ...@@ -232,6 +232,12 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
specific files such as HEAD, index... See "MULTIPLE WORKING specific files such as HEAD, index... See "MULTIPLE WORKING
TREES" section for more information. TREES" section for more information.
--ignore-other-worktrees::
`git checkout` refuses when the wanted ref is already checked
out by another worktree. This option makes it check the ref
out anyway. In other words, the ref can be held by more than one
worktree.
<branch>:: <branch>::
Branch to checkout; if it refers to a branch (i.e., a name that, Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that when prepended with "refs/heads/", is a valid ref), then that
......
...@@ -37,6 +37,7 @@ struct checkout_opts { ...@@ -37,6 +37,7 @@ struct checkout_opts {
int writeout_stage; int writeout_stage;
int overwrite_ignore; int overwrite_ignore;
int ignore_skipworktree; int ignore_skipworktree;
int ignore_other_worktrees;
const char *new_branch; const char *new_branch;
const char *new_branch_force; const char *new_branch_force;
...@@ -1210,7 +1211,8 @@ static int parse_branchname_arg(int argc, const char **argv, ...@@ -1210,7 +1211,8 @@ static int parse_branchname_arg(int argc, const char **argv,
int flag; int flag;
char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag); char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
if (head_ref && if (head_ref &&
(!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path))) (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) &&
!opts->ignore_other_worktrees)
check_linked_checkouts(new); check_linked_checkouts(new);
free(head_ref); free(head_ref);
} }
...@@ -1341,6 +1343,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) ...@@ -1341,6 +1343,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
N_("second guess 'git checkout no-such-branch'")), N_("second guess 'git checkout no-such-branch'")),
OPT_FILENAME(0, "to", &opts.new_worktree, OPT_FILENAME(0, "to", &opts.new_worktree,
N_("check a branch out in a separate working directory")), N_("check a branch out in a separate working directory")),
OPT_BOOL(0, "ignore-other-worktrees", &opts.ignore_other_worktrees,
N_("do not check if another worktree is holding the given ref")),
OPT_END(), OPT_END(),
}; };
......
...@@ -79,6 +79,13 @@ test_expect_success 'die the same branch is already checked out' ' ...@@ -79,6 +79,13 @@ test_expect_success 'die the same branch is already checked out' '
) )
' '
test_expect_success 'not die the same branch is already checked out' '
(
cd here &&
git checkout --ignore-other-worktrees --to anothernewmaster newmaster
)
'
test_expect_success 'not die on re-checking out current branch' ' test_expect_success 'not die on re-checking out current branch' '
( (
cd there && cd there &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册