git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] merge-file: honor merge.conflictStyle outside of a repository

From
KHKristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Date
Feb 5, 2026, 20:51 UTC
Message-ID
<fa7fc215-03eb-492d-9af4-457482c56a48@app.fastmail.com>
In-Reply-To
<3724733C-FECB-47F5-841C-84DE9792332D@ytausch.de>
On Thu, Feb 5, 2026, at 21:27, Yannik Tausch wrote:
Show 8 quoted lines
>[snip]
> From bed0035d38072c67e0be8eedb0cf98da936cbac6 Mon Sep 17 00:00:00 2001
> From: Yannik Tausch <dev@ytausch.de>
> 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.
Show 18 quoted lines
>
> Signed-off-by: Yannik Tausch <dev@ytausch.de>
> ---
>  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.adoc
> b/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 written
> to 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.

Show 55 quoted lines
> +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.

Show 13 quoted lines
> +	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.

Show 8 quoted lines
> +	test_cmp nongit-expect nongit-actual
> +'
> +
>  test_expect_success 'marker size' '
>  	cat >expect <<-\EOF &&
>  	Dominus regit me,
> --
> 2.52.0
Previous: Junio C HamanoNext: Yannik Tausch
Message 5 of 12 in “[DOC] merge-file: document that merge.conflictStyle requires a repository”
  1. Yannik TauschFeb 5, 2026
  2. Junio C HamanoFeb 5, 2026
  3. merge-file: honor merge.conflictStyle outside of a repositoryYannik Tausch, Feb 5, 2026
  4. Junio C HamanoFeb 5, 2026
  5. Kristoffer HaugsbakkFeb 5, 2026
  6. Yannik TauschFeb 5, 2026
  7. Junio C HamanoFeb 6, 2026
  8. Yannik TauschFeb 7, 2026
  9. merge-file: honor merge.conflictStyle outside of a repositoryYannik Tausch, Feb 7, 2026
  10. Kristoffer HaugsbakkFeb 7, 2026
  11. Patrick SteinhardtFeb 9, 2026
  12. Junio C HamanoFeb 9, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.