Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- Documentation/git-checkout.txt | 6 +++++- builtin/checkout.c | 23 ++++++++++++++++++++--- t/t1011-read-tree-sparse-checkout.sh | 7 +++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 478bfe7..1d82063 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -12,7 +12,7 @@ SYNOPSIS 'git checkout' [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] 'git checkout' [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>... 'git checkout' --patch [<tree-ish>] [--] [<paths>...] -'git checkout' -S +'git checkout' [-S|--full] DESCRIPTION ----------- @@ -184,6 +184,10 @@ edits from your current working tree. $GIT_DIR/info/sparse-checkout. The working directory is also updated. An empty file will abort the process. +--full: + Reset $GIT_DIR/info/sparse-checkout to include everything and + update working directory accordingly. + <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 diff --git a/builtin/checkout.c b/builtin/checkout.c index 47847b3..f070930 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -710,7 +710,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) char *conflict_style = NULL; int patch_mode = 0; int dwim_new_local_branch = 1; - int update_sparse_checkout = 0; + int update_sparse_checkout = 0, full_checkout = 0; struct option options[] = { OPT__QUIET(&opts.quiet), OPT_STRING('b', NULL, &opts.new_branch, "branch", @@ -732,6 +732,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"), OPT_BOOLEAN('S', "update-sparse-checkout", &update_sparse_checkout, "open up editor to edit $GIT_DIR/info/sparse-checkout" ), + OPT_BOOLEAN(0, "full", &full_checkout, + "reset $GIT_DIR/info/sparse-checkout to checkout everything" ), { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL, "second guess 'git checkout no-such-branch'", PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, @@ -750,6 +752,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, checkout_usage, PARSE_OPT_KEEP_DASHDASH); + if (full_checkout) + update_sparse_checkout = 1; + if (update_sparse_checkout && !core_apply_sparse_checkout) die("core.sparseCheckout needs to be turned on"); @@ -952,8 +957,20 @@ no_reference: if (opts.writeout_stage) die("--ours/--theirs is incompatible with switching branches."); - if (update_sparse_checkout) - edit_info_sparse_checkout(); + if (update_sparse_checkout) { + if (full_checkout) { + FILE *fp = fopen(git_path("info/sparse-checkout"), "w+"); + if (!fp) + die_errno("Unable to reset %s", git_path("info/sparse-checkout")); + fprintf(fp, "# Specify what files are checked out in working directory\n"); + fprintf(fp, "# Run \"git checkout\" after updating this file to update working directory\n"); + fprintf(fp, "# If this is opened by \"git checkout -S\", empty this file will abort it.\n"); + fprintf(fp, "*\n"); + fclose(fp); + } + else + edit_info_sparse_checkout(full_checkout); + } return switch_branches(&opts, &new); } diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh index fe4716c..055e858 100755 --- a/t/t1011-read-tree-sparse-checkout.sh +++ b/t/t1011-read-tree-sparse-checkout.sh @@ -202,4 +202,11 @@ EOF test ! -f init.t ' +test_expect_success 'git checkout --full' ' + git checkout --full && + grep "^\*$" .git/info/sparse-checkout && + test -f sub/added && + test -f init.t +' + test_done -- 1.7.3.2.210.g045198 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html