Skip to content

Commit

Permalink
Merge branch 'jc/push-2.0-default-to-simple'
Browse files Browse the repository at this point in the history
Finally update the "git push" default behaviour to "simple".
  • Loading branch information
gitster committed Mar 7, 2014
2 parents 6ab4ae2 + b2ed944 commit 009055f
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 41 deletions.
14 changes: 4 additions & 10 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,13 @@ advice.*::
--
pushUpdateRejected::
Set this variable to 'false' if you want to disable
'pushNonFFCurrent', 'pushNonFFDefault',
'pushNonFFCurrent',
'pushNonFFMatching', 'pushAlreadyExists',
'pushFetchFirst', and 'pushNeedsForce'
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
Expand Down Expand Up @@ -1980,7 +1974,7 @@ When pushing to a remote that is different from the remote you normally
pull from, work as `current`. This is the safest option and is suited
for beginners.
+
This mode will become the default in Git 2.0.
This mode has become the default in Git 2.0.

* `matching` - push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
Expand All @@ -1999,8 +1993,8 @@ suitable for pushing into a shared central repository, as other
people may add new branches there, or update the tip of existing
branches outside your control.
+
This is currently the default, but Git 2.0 will change the default
to `simple`.
This used to be the default, but not since Git 2.0 (`simple` is the
new default).

--

Expand Down
10 changes: 6 additions & 4 deletions Documentation/git-push.txt
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ the local side, the remote side is updated if a branch of the same name
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 <refspec>.

--prune::
Remove remote branches that don't have a local counterpart. For example
Expand Down Expand Up @@ -442,8 +442,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 <refspec> is given can be
configured by setting the `push` option of the remote, or the `push.default`
Expand Down
2 changes: 0 additions & 2 deletions advice.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

int advice_push_update_rejected = 1;
int advice_push_non_ff_current = 1;
int advice_push_non_ff_default = 1;
int advice_push_non_ff_matching = 1;
int advice_push_already_exists = 1;
int advice_push_fetch_first = 1;
Expand All @@ -23,7 +22,6 @@ static struct {
} advice_config[] = {
{ "pushupdaterejected", &advice_push_update_rejected },
{ "pushnonffcurrent", &advice_push_non_ff_current },
{ "pushnonffdefault", &advice_push_non_ff_default },
{ "pushnonffmatching", &advice_push_non_ff_matching },
{ "pushalreadyexists", &advice_push_already_exists },
{ "pushfetchfirst", &advice_push_fetch_first },
Expand Down
1 change: 0 additions & 1 deletion advice.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

extern int advice_push_update_rejected;
extern int advice_push_non_ff_current;
extern int advice_push_non_ff_default;
extern int advice_push_non_ff_matching;
extern int advice_push_already_exists;
extern int advice_push_fetch_first;
Expand Down
31 changes: 7 additions & 24 deletions builtin/push.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ static struct push_cas_option cas;
static const char **refspec;
static int refspec_nr;
static int refspec_alloc;
static int default_matching_used;

static void add_refspec(const char *ref)
{
Expand Down Expand Up @@ -204,9 +203,9 @@ static void setup_push_current(struct remote *remote, struct branch *branch)
}

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"
Expand Down Expand Up @@ -247,14 +246,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:
if (triangular)
setup_push_current(remote, branch);
Expand Down Expand Up @@ -283,12 +282,6 @@ static const char message_advice_pull_before_push[] =
"'git pull ...') 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 integrate the remote changes\n"
Expand Down Expand Up @@ -317,13 +310,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_update_rejected)
return;
advise(_(message_advice_use_upstream));
}

static void advise_checkout_pull_push(void)
{
if (!advice_push_non_ff_matching || !advice_push_update_rejected)
Expand Down Expand Up @@ -385,10 +371,7 @@ static int push_with_options(struct transport *transport, int flags)
if (reject_reasons & REJECT_NON_FF_HEAD) {
advise_pull_before_push();
} else if (reject_reasons & REJECT_NON_FF_OTHER) {
if (default_matching_used)
advise_use_upstream();
else
advise_checkout_pull_push();
advise_checkout_pull_push();
} else if (reject_reasons & REJECT_ALREADY_EXISTS) {
advise_ref_already_exists();
} else if (reject_reasons & REJECT_FETCH_FIRST) {
Expand Down

0 comments on commit 009055f

Please sign in to comment.