diff options
-rw-r--r-- | Documentation/config.txt | 5 | ||||
-rw-r--r-- | Documentation/git-checkout.txt | 5 | ||||
-rw-r--r-- | builtin-branch.c | 18 | ||||
-rwxr-xr-x | t/t3200-branch.sh | 9 |
4 files changed, 28 insertions, 9 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt index 4b67f0adf7..aeece848a5 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -309,7 +309,10 @@ branch.autosetupmerge:: so that gitlink:git-pull[1] will appropriately merge from that remote branch. Note that even if this option is not set, this behavior can be chosen per-branch using the `--track` - and `--no-track` options. This option defaults to false. + and `--no-track` options. This option can have values + 'false' (never touch the configuration), 'all' (do this + for all branches), or 'true' (do this only when + branching from a remote tracking branch), and defaults to 'true'. branch.<name>.remote:: When in branch <name>, it tells `git fetch` which remote to fetch. diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 818b720b91..82929523c7 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -52,8 +52,9 @@ OPTIONS set up configuration so that git-pull will automatically retrieve data from the remote branch. Set the branch.autosetupmerge configuration variable to true if you - want git-checkout and git-branch to always behave as if - '--track' were given. + want git-checkout and git-branch to behave as if + '--track' were given when you branch from a remote + tracking branch. --no-track:: When -b is given and a branch is created off a remote branch, diff --git a/builtin-branch.c b/builtin-branch.c index 84a8ad7b73..423c30194c 100644 --- a/builtin-branch.c +++ b/builtin-branch.c @@ -22,7 +22,7 @@ static const char builtin_branch_usage[] = static const char *head; static unsigned char head_sha1[20]; -static int branch_track_remotes = 1; +static int branch_track = 1; /* 0 = none, 1 = remotes, 2 = all */ static int branch_use_color; static char branch_colors[][COLOR_MAXLEN] = { @@ -66,8 +66,12 @@ static int git_branch_config(const char *var, const char *value) color_parse(value, var, branch_colors[slot]); return 0; } - if (!strcmp(var, "branch.autosetupmerge")) - branch_track_remotes = git_config_bool(var, value); + if (!strcmp(var, "branch.autosetupmerge")) { + if (!strcmp(value, "all")) + branch_track = 2; + else + branch_track = git_config_bool(var, value); + } return git_default_config(var, value); } @@ -504,7 +508,9 @@ static void create_branch(const char *name, const char *start_name, /* When branching off a remote branch, set up so that git-pull automatically merges from there. So far, this is only done for remotes registered via .git/config. */ - if (real_ref && track) + if (real_ref && (track == 2 || + (track == 1 && + !prefixcmp(real_ref, "refs/remotes/")))) set_branch_defaults(name, real_ref); if (write_ref_sha1(lock, sha1, msg) < 0) @@ -564,7 +570,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) int i; git_config(git_branch_config); - track = branch_track_remotes; + track = branch_track; for (i = 1; i < argc; i++) { const char *arg = argv[i]; @@ -576,7 +582,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) break; } if (!strcmp(arg, "--track")) { - track = 1; + track = 2; continue; } if (!strcmp(arg, "--no-track")) { diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh index c6f472ac04..a19e961cb3 100755 --- a/t/t3200-branch.sh +++ b/t/t3200-branch.sh @@ -148,6 +148,15 @@ test_expect_success 'test tracking setup via config' \ test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' +test_expect_success 'autosetupmerge = all' ' + git config branch.autosetupmerge true && + git branch all1 master && + test -z "$(git config branch.all1.merge)" && + git config branch.autosetupmerge all && + git branch all2 master && + test $(git config branch.all2.merge) = refs/heads/master +' + test_expect_success 'test overriding tracking setup via --no-track' \ 'git config branch.autosetupmerge true && git config remote.local.url . && |