checkout: add --ignore-other-wortrees
Noticed-by: Mark Levedahl <mlevedahl@gmail.com> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									10f102be21
								
							
						
					
					
						commit
						1d0fa898ea
					
				|  | @ -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 | ||||
| 	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 to checkout; if it refers to a branch (i.e., a name that, | ||||
| 	when prepended with "refs/heads/", is a valid ref), then that | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ struct checkout_opts { | |||
| 	int writeout_stage; | ||||
| 	int overwrite_ignore; | ||||
| 	int ignore_skipworktree; | ||||
| 	int ignore_other_worktrees; | ||||
|  | ||||
| 	const char *new_branch; | ||||
| 	const char *new_branch_force; | ||||
|  | @ -1210,7 +1211,8 @@ static int parse_branchname_arg(int argc, const char **argv, | |||
| 		int flag; | ||||
| 		char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag); | ||||
| 		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); | ||||
| 		free(head_ref); | ||||
| 	} | ||||
|  | @ -1341,6 +1343,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) | |||
| 				N_("second guess 'git checkout no-such-branch'")), | ||||
| 		OPT_FILENAME(0, "to", &opts.new_worktree, | ||||
| 			   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(), | ||||
| 	}; | ||||
|  | ||||
|  |  | |||
|  | @ -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' ' | ||||
| 	( | ||||
| 		cd there && | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Nguyễn Thái Ngọc Duy
						Nguyễn Thái Ngọc Duy