提交 f23e8dec 编写于 作者: J Junio C Hamano

merge: introduce merge.ff configuration variable

This variable gives the default setting for --ff, --no-ff or --ff-only
options of "git merge" command.
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 541d1fa8
...@@ -16,6 +16,16 @@ merge.defaultToUpstream:: ...@@ -16,6 +16,16 @@ merge.defaultToUpstream::
to their corresponding remote tracking branches, and the tips of to their corresponding remote tracking branches, and the tips of
these tracking branches are merged. these tracking branches are merged.
merge.ff::
By default, git does not create an extra merge commit when merging
a commit that is a descendant of the current commit. Instead, the
tip of the current branch is fast-forwarded. When set to `false`,
this variable tells git to create an extra merge commit in such
a case (equivalent to giving the `--no-ff` option from the command
line). When set to `only`, only such fast-forward merges are
allowed (equivalent to giving the `--ff-only` option from the
command line).
merge.log:: merge.log::
In addition to branch names, populate the log message with at In addition to branch names, populate the log message with at
most the specified number of one-line descriptions from the most the specified number of one-line descriptions from the
......
...@@ -550,6 +550,15 @@ static int git_merge_config(const char *k, const char *v, void *cb) ...@@ -550,6 +550,15 @@ static int git_merge_config(const char *k, const char *v, void *cb)
if (is_bool && shortlog_len) if (is_bool && shortlog_len)
shortlog_len = DEFAULT_MERGE_LOG_LEN; shortlog_len = DEFAULT_MERGE_LOG_LEN;
return 0; return 0;
} else if (!strcmp(k, "merge.ff")) {
int boolval = git_config_maybe_bool(k, v);
if (0 <= boolval) {
allow_fast_forward = boolval;
} else if (v && !strcmp(v, "only")) {
allow_fast_forward = 1;
fast_forward_only = 1;
} /* do not barf on values from future versions of git */
return 0;
} else if (!strcmp(k, "merge.defaulttoupstream")) { } else if (!strcmp(k, "merge.defaulttoupstream")) {
default_to_upstream = git_config_bool(k, v); default_to_upstream = git_config_bool(k, v);
return 0; return 0;
......
...@@ -225,12 +225,28 @@ test_expect_success 'merge c1 with c2 and c3' ' ...@@ -225,12 +225,28 @@ test_expect_success 'merge c1 with c2 and c3' '
test_debug 'git log --graph --decorate --oneline --all' test_debug 'git log --graph --decorate --oneline --all'
test_expect_success 'failing merges with --ff-only' ' test_expect_success 'merges with --ff-only' '
git reset --hard c1 && git reset --hard c1 &&
test_tick && test_tick &&
test_must_fail git merge --ff-only c2 && test_must_fail git merge --ff-only c2 &&
test_must_fail git merge --ff-only c3 && test_must_fail git merge --ff-only c3 &&
test_must_fail git merge --ff-only c2 c3 test_must_fail git merge --ff-only c2 c3 &&
git reset --hard c0 &&
git merge c3 &&
verify_head $c3
'
test_expect_success 'merges with merge.ff=only' '
git reset --hard c1 &&
test_tick &&
test_when_finished "git config --unset merge.ff" &&
git config merge.ff only &&
test_must_fail git merge c2 &&
test_must_fail git merge c3 &&
test_must_fail git merge c2 c3 &&
git reset --hard c0 &&
git merge c3 &&
verify_head $c3
' '
test_expect_success 'merge c0 with c1 (no-commit)' ' test_expect_success 'merge c0 with c1 (no-commit)' '
...@@ -448,6 +464,29 @@ test_expect_success 'merge c0 with c1 (no-ff)' ' ...@@ -448,6 +464,29 @@ test_expect_success 'merge c0 with c1 (no-ff)' '
test_debug 'git log --graph --decorate --oneline --all' test_debug 'git log --graph --decorate --oneline --all'
test_expect_success 'merge c0 with c1 (merge.ff=false)' '
git reset --hard c0 &&
git config merge.ff false &&
test_tick &&
git merge c1 &&
git config --remove-section merge &&
verify_merge file result.1 &&
verify_parents $c0 $c1
'
test_debug 'git log --graph --decorate --oneline --all'
test_expect_success 'combine branch.master.mergeoptions with merge.ff' '
git reset --hard c0 &&
git config branch.master.mergeoptions --ff
git config merge.ff false
test_tick &&
git merge c1 &&
git config --remove-section "branch.master" &&
git config --remove-section "merge" &&
verify_merge file result.1 &&
verify_parents "$c0"
'
test_expect_success 'combining --squash and --no-ff is refused' ' test_expect_success 'combining --squash and --no-ff is refused' '
test_must_fail git merge --squash --no-ff c1 && test_must_fail git merge --squash --no-ff c1 &&
test_must_fail git merge --no-ff --squash c1 test_must_fail git merge --no-ff --squash c1
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册