From b2ed944af79041b4da151a432064c3b1c1b82fc5 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 4 Jan 2013 16:02:29 -0800 Subject: push: switch default from "matching" to "simple" We promised to change the behaviour of lazy "git push [there]" that does not say what to push on the command line from "matching" to "simple" in Git 2.0. This finally flips that bit. Helped-by: Matthieu Moy Signed-off-by: Junio C Hamano diff --git a/Documentation/config.txt b/Documentation/config.txt index bf8f911..2fe88f0 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -142,17 +142,11 @@ advice.*:: -- pushNonFastForward:: Set this variable to 'false' if you want to disable - 'pushNonFFCurrent', 'pushNonFFDefault', and + 'pushNonFFCurrent', and 'pushNonFFMatching' simultaneously. pushNonFFCurrent:: Advice shown when linkgit:git-push[1] fails due to a non-fast-forward update to the current branch. - pushNonFFDefault:: - Advice to set 'push.default' to 'upstream' or 'current' - when you ran linkgit:git-push[1] and pushed 'matching - refs' by default (i.e. you did not provide an explicit - refspec, and no 'push.default' configuration was set) - and it resulted in a non-fast-forward error. pushNonFFMatching:: Advice shown when you ran linkgit:git-push[1] and pushed 'matching refs' explicitly (i.e. you used ':', or @@ -1750,15 +1744,15 @@ push.default:: since locally stalled branches will attempt a non-fast forward push if other users updated the branch. + - This is currently the default, but Git 2.0 will change the default - to `simple`. + This used to be the default, and stale web sites may still say so, + but Git 2.0 has changed the default to `simple`. * `upstream` - push the current branch to its upstream branch. With this, `git push` will update the same remote ref as the one which is merged by `git pull`, making `push` and `pull` symmetrical. See "branch..merge" for how to configure the upstream branch. * `simple` - like `upstream`, but refuses to push if the upstream branch's name is different from the local one. This is the safest - option and is well-suited for beginners. It will become the default + option and is well-suited for beginners. It has become the default in Git 2.0. * `current` - push the current branch to a branch of the same name. -- diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index 8b637d3..2d8498a 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -36,10 +36,14 @@ OPTIONS[[OPTIONS]] The format of a parameter is an optional plus `+`, followed by the source ref , followed by a colon `:`, followed by the destination ref . - It is used to specify with what object the ref - in the remote repository is to be updated. If not specified, + It is used to specify what object the ref + in the remote repository is to be updated to. If no + is specified on the command line, and if no + is configured for the , the behavior of the command is controlled by the `push.default` - configuration variable. + configuration variable, and if it is unset, the `simple` + behaviour is used (see lingit:git-config[1] and look + for `push.default`). + The is often the name of the branch you would want to push, but it can be any arbitrary "SHA-1 expression", such as `master~4` or @@ -65,14 +69,11 @@ the remote repository. The special refspec `:` (or `+:` to allow non-fast-forward updates) directs git to push "matching" branches: for every branch that exists on the local side, the remote side is updated if a branch of the same name -already exists on the remote side. This is the default operation mode -if no explicit refspec is found (that is neither on the command line -nor in any Push line of the corresponding remotes file---see below) and -no `push.default` configuration variable is set. +already exists on the remote side. --all:: - Instead of naming each ref to push, specifies that all - refs under `refs/heads/` be pushed. + Push all branches (i.e. refs under `refs/heads/`); cannot be + used with other . --prune:: Remove remote branches that don't have a local counterpart. For example @@ -357,8 +358,10 @@ Examples configured for the current branch). `git push origin`:: - Without additional configuration, works like - `git push origin :`. + Without additional configuration, pushes the current branch to + the configured upstream (`remote.origin.merge` configuration + variable) if it has the same name as the current branch, and + errors out without pushing otherwise. + The default behavior of this command when no is given can be configured by setting the `push` option of the remote, or the `push.default` diff --git a/advice.c b/advice.c index edfbd4a..5afed93 100644 --- a/advice.c +++ b/advice.c @@ -2,7 +2,6 @@ int advice_push_nonfastforward = 1; int advice_push_non_ff_current = 1; -int advice_push_non_ff_default = 1; int advice_push_non_ff_matching = 1; int advice_status_hints = 1; int advice_commit_before_merge = 1; @@ -16,7 +15,6 @@ static struct { } advice_config[] = { { "pushnonfastforward", &advice_push_nonfastforward }, { "pushnonffcurrent", &advice_push_non_ff_current }, - { "pushnonffdefault", &advice_push_non_ff_default }, { "pushnonffmatching", &advice_push_non_ff_matching }, { "statushints", &advice_status_hints }, { "commitbeforemerge", &advice_commit_before_merge }, diff --git a/advice.h b/advice.h index f3cdbbf..2c800e6 100644 --- a/advice.h +++ b/advice.h @@ -5,7 +5,6 @@ extern int advice_push_nonfastforward; extern int advice_push_non_ff_current; -extern int advice_push_non_ff_default; extern int advice_push_non_ff_matching; extern int advice_status_hints; extern int advice_commit_before_merge; diff --git a/builtin/push.c b/builtin/push.c index db9ba30..9f7c252 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -24,7 +24,6 @@ static int progress = -1; static const char **refspec; static int refspec_nr; static int refspec_alloc; -static int default_matching_used; static void add_refspec(const char *ref) { @@ -148,9 +147,9 @@ static void setup_push_upstream(struct remote *remote, int simple) } static char warn_unspecified_push_default_msg[] = -N_("push.default is unset; its implicit value is changing in\n" +N_("push.default is unset; its implicit value has changed in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" - "and maintain the current behavior after the default changes, use:\n" + "and maintain the traditional behavior, use:\n" "\n" " git config --global push.default matching\n" "\n" @@ -175,14 +174,14 @@ static void setup_default_push_refspecs(struct remote *remote) { switch (push_default) { default: - case PUSH_DEFAULT_UNSPECIFIED: - default_matching_used = 1; - warn_unspecified_push_default_configuration(); - /* fallthru */ case PUSH_DEFAULT_MATCHING: add_refspec(":"); break; + case PUSH_DEFAULT_UNSPECIFIED: + warn_unspecified_push_default_configuration(); + /* fallthru */ + case PUSH_DEFAULT_SIMPLE: setup_push_upstream(remote, 1); break; @@ -208,12 +207,6 @@ static const char message_advice_pull_before_push[] = "before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details."); -static const char message_advice_use_upstream[] = - N_("Updates were rejected because a pushed branch tip is behind its remote\n" - "counterpart. If you did not intend to push that branch, you may want to\n" - "specify branches to push or set the 'push.default' configuration variable\n" - "to 'simple', 'current' or 'upstream' to push only the current branch."); - static const char message_advice_checkout_pull_push[] = N_("Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. Check out this branch and merge the remote changes\n" @@ -227,13 +220,6 @@ static void advise_pull_before_push(void) advise(_(message_advice_pull_before_push)); } -static void advise_use_upstream(void) -{ - if (!advice_push_non_ff_default || !advice_push_nonfastforward) - return; - advise(_(message_advice_use_upstream)); -} - static void advise_checkout_pull_push(void) { if (!advice_push_non_ff_matching || !advice_push_nonfastforward) @@ -272,10 +258,7 @@ static int push_with_options(struct transport *transport, int flags) advise_pull_before_push(); break; case NON_FF_OTHER: - if (default_matching_used) - advise_use_upstream(); - else - advise_checkout_pull_push(); + advise_checkout_pull_push(); break; } -- cgit v0.10.2-6-g49f6