Re: [PATCH] merge-file: honor merge.conflictStyle outside of a repository
From: Kristoffer Haugsbakk <hidden>
Date: 2026-02-05 20:52:37
Possibly related (same subject, not in this thread)
- 2026-02-05 · Re: [PATCH] merge-file: honor merge.conflictStyle outside of a repository · Junio C Hamano <hidden>
On Thu, Feb 5, 2026, at 21:27, Yannik Tausch wrote:
[snip] From bed0035d38072c67e0be8eedb0cf98da936cbac6 Mon Sep 17 00:00:00 2001 From: Yannik Tausch <redacted> Date: Thu, 5 Feb 2026 21:09:52 +0100 Subject: [PATCH] merge-file: honor merge.conflictStyle outside of a repository When running outside a repository, git merge-file previously ignored the merge.conflictStyle configuration variable entirely. Teach it to
Preferably the message should discuss the code as it exists without the patch applied in the present tense. (SubmittingPatches present-tense)
read from system and user configuration files using read_very_early_config(), so that users can set their preferred conflict style globally and have it honored even outside a repository.
The update to the documentation might merit an “also”? I dunno.
quoted hunk ↗ jump to hunk
Signed-off-by: Yannik Tausch <redacted> --- Documentation/git-merge-file.adoc | 3 +++ builtin/merge-file.c | 11 +++++----- t/t6403-merge-file.sh | 34 +++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-)diff --git a/Documentation/git-merge-file.adocb/Documentation/git-merge-file.adoc index 71915a00fa..773037aa14 100644--- a/Documentation/git-merge-file.adoc +++ b/Documentation/git-merge-file.adoc@@ -86,6 +86,9 @@ object store and the object ID of its blob is writtento standard output. --zdiff3:: Show conflicts in "zdiff3" style.
You need to replace this blank line with a `+` if you want this to be the second paragraph on this option.
quoted hunk ↗ jump to hunk
+The `--diff3` and `--zdiff3` options default to the value of the +`merge.conflictStyle` configuration variable (see linkgit:git-config[1]). + --ours:: --theirs:: --union::diff --git a/builtin/merge-file.c b/builtin/merge-file.c index 46775d0c79..1b6e16b9cb 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c@@ -95,12 +95,13 @@ int cmd_merge_file(int argc, xmp.style = 0; xmp.favor = 0; - if (startup_info->have_repository) { - /* Read the configuration file */ + if (startup_info->have_repository) repo_config(the_repository, git_xmerge_config, NULL); - if (0 <= git_xmerge_style) - xmp.style = git_xmerge_style; - } + else + read_very_early_config(git_xmerge_config, NULL); + + if (0 <= git_xmerge_style) + xmp.style = git_xmerge_style; argc = parse_options(argc, argv, prefix, options, merge_file_usage, 0); if (argc != 3)diff --git a/t/t6403-merge-file.sh b/t/t6403-merge-file.sh index 06ab4d7aed..9df9f878c8 100755 --- a/t/t6403-merge-file.sh +++ b/t/t6403-merge-file.sh@@ -428,6 +428,40 @@ test_expect_success '"diff3 -m" style output (2)' ' test_cmp expect actual ' +test_expect_success 'merge.conflictStyle honored outside repo' ' + test_config_global merge.conflictStyle diff3 && + cat >nongit-base <<-\EOF && + line1 + original + line3 + EOF + cat >nongit-ours <<-\EOF && + line1 + ours + line3 + EOF + cat >nongit-theirs <<-\EOF && + line1 + theirs + line3 + EOF + cat >nongit-expect <<-\EOF &&
Some tests in this file already use the regular expect/actual but there are also many one-off names like expect.c/myers_output.c. I don’t understand why. But I’m just thinking out loud here.
+ line1 + <<<<<<< ours + ours + ||||||| base + original + ======= + theirs + >>>>>>> theirs + line3 + EOF + test_must_fail nongit git merge-file -p \ + -L ours -L base -L theirs \ + "$PWD/nongit-ours" "$PWD/nongit-base" "$PWD/nongit-theirs" >nongit-actual &&
It seems you might as well break the lines for this command further with some `\` to get closer to the soft limit.
+ test_cmp nongit-expect nongit-actual +' + test_expect_success 'marker size' ' cat >expect <<-\EOF && Dominus regit me, -- 2.52.0