Merge branch 'ah/force-pull-rebase-configuration'
"git pull" learned to warn when no pull.rebase configuration exists, and neither --[no-]rebase nor --ff-only is given (which would result a merge). * ah/force-pull-rebase-configuration: pull: warn if the user didn't say whether to rebase or to merge
This commit is contained in:
@ -327,6 +327,22 @@ static enum rebase_type config_get_rebase(void)
|
|||||||
if (!git_config_get_value("pull.rebase", &value))
|
if (!git_config_get_value("pull.rebase", &value))
|
||||||
return parse_config_rebase("pull.rebase", value, 1);
|
return parse_config_rebase("pull.rebase", value, 1);
|
||||||
|
|
||||||
|
if (opt_verbosity >= 0 &&
|
||||||
|
(!opt_ff || strcmp(opt_ff, "--ff-only"))) {
|
||||||
|
warning(_("Pulling without specifying how to reconcile divergent branches is\n"
|
||||||
|
"discouraged. You can squelch this message by running one of the following\n"
|
||||||
|
"commands sometime before your next pull:\n"
|
||||||
|
"\n"
|
||||||
|
" git config pull.rebase false # merge (the default strategy)\n"
|
||||||
|
" git config pull.rebase true # rebase\n"
|
||||||
|
" git config pull.ff only # fast-forward only\n"
|
||||||
|
"\n"
|
||||||
|
"You can replace \"git config\" with \"git config --global\" to set a default\n"
|
||||||
|
"preference for all repositories. You can also pass --rebase, --no-rebase,\n"
|
||||||
|
"or --ff-only on the command line to override the configured default per\n"
|
||||||
|
"invocation.\n"));
|
||||||
|
}
|
||||||
|
|
||||||
return REBASE_FALSE;
|
return REBASE_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,10 +11,10 @@ test_expect_success 'setup' '
|
|||||||
git commit -m one)
|
git commit -m one)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git pull -q' '
|
test_expect_success 'git pull -q --no-rebase' '
|
||||||
mkdir clonedq &&
|
mkdir clonedq &&
|
||||||
(cd clonedq && git init &&
|
(cd clonedq && git init &&
|
||||||
git pull -q "../parent" >out 2>err &&
|
git pull -q --no-rebase "../parent" >out 2>err &&
|
||||||
test_must_be_empty err &&
|
test_must_be_empty err &&
|
||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
@ -30,10 +30,10 @@ test_expect_success 'git pull -q --rebase' '
|
|||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git pull' '
|
test_expect_success 'git pull --no-rebase' '
|
||||||
mkdir cloned &&
|
mkdir cloned &&
|
||||||
(cd cloned && git init &&
|
(cd cloned && git init &&
|
||||||
git pull "../parent" >out 2>err &&
|
git pull --no-rebase "../parent" >out 2>err &&
|
||||||
test -s err &&
|
test -s err &&
|
||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
@ -46,10 +46,10 @@ test_expect_success 'git pull --rebase' '
|
|||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git pull -v' '
|
test_expect_success 'git pull -v --no-rebase' '
|
||||||
mkdir clonedv &&
|
mkdir clonedv &&
|
||||||
(cd clonedv && git init &&
|
(cd clonedv && git init &&
|
||||||
git pull -v "../parent" >out 2>err &&
|
git pull -v --no-rebase "../parent" >out 2>err &&
|
||||||
test -s err &&
|
test -s err &&
|
||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
@ -62,25 +62,25 @@ test_expect_success 'git pull -v --rebase' '
|
|||||||
test_must_be_empty out)
|
test_must_be_empty out)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git pull -v -q' '
|
test_expect_success 'git pull -v -q --no-rebase' '
|
||||||
mkdir clonedvq &&
|
mkdir clonedvq &&
|
||||||
(cd clonedvq && git init &&
|
(cd clonedvq && git init &&
|
||||||
git pull -v -q "../parent" >out 2>err &&
|
git pull -v -q --no-rebase "../parent" >out 2>err &&
|
||||||
test_must_be_empty out &&
|
test_must_be_empty out &&
|
||||||
test_must_be_empty err)
|
test_must_be_empty err)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git pull -q -v' '
|
test_expect_success 'git pull -q -v --no-rebase' '
|
||||||
mkdir clonedqv &&
|
mkdir clonedqv &&
|
||||||
(cd clonedqv && git init &&
|
(cd clonedqv && git init &&
|
||||||
git pull -q -v "../parent" >out 2>err &&
|
git pull -q -v --no-rebase "../parent" >out 2>err &&
|
||||||
test_must_be_empty out &&
|
test_must_be_empty out &&
|
||||||
test -s err)
|
test -s err)
|
||||||
'
|
'
|
||||||
test_expect_success 'git pull --cleanup errors early on invalid argument' '
|
test_expect_success 'git pull --cleanup errors early on invalid argument' '
|
||||||
mkdir clonedcleanup &&
|
mkdir clonedcleanup &&
|
||||||
(cd clonedcleanup && git init &&
|
(cd clonedcleanup && git init &&
|
||||||
test_must_fail git pull --cleanup invalid "../parent" >out 2>err &&
|
test_must_fail git pull --no-rebase --cleanup invalid "../parent" >out 2>err &&
|
||||||
test_must_be_empty out &&
|
test_must_be_empty out &&
|
||||||
test -s err)
|
test -s err)
|
||||||
'
|
'
|
||||||
|
@ -27,6 +27,44 @@ test_expect_success 'setup' '
|
|||||||
git tag c3
|
git tag c3
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git pull . c1 2>err &&
|
||||||
|
test_i18ngrep "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set and pull.ff=false' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
test_config pull.ff false &&
|
||||||
|
git pull . c1 2>err &&
|
||||||
|
test_i18ngrep "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set and pull.ff=only' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
test_config pull.ff only &&
|
||||||
|
git pull . c1 2>err &&
|
||||||
|
test_i18ngrep ! "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set and --rebase given' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git pull --rebase . c1 2>err &&
|
||||||
|
test_i18ngrep ! "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set and --no-rebase given' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git pull --no-rebase . c1 2>err &&
|
||||||
|
test_i18ngrep ! "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull.rebase not set and --ff-only given' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git pull --ff-only . c1 2>err &&
|
||||||
|
test_i18ngrep ! "Pulling without specifying how to reconcile" err
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'merge c1 with c2' '
|
test_expect_success 'merge c1 with c2' '
|
||||||
git reset --hard c1 &&
|
git reset --hard c1 &&
|
||||||
test -f c0.c &&
|
test -f c0.c &&
|
||||||
|
Reference in New Issue
Block a user