Merge branch 'yt/merge-file-outside-a-repository'

"git merge-file" can be run outside a repository, but it ignored
all configuration, even the per-user ones.  The command now uses
available configuration files to find its customization.

* yt/merge-file-outside-a-repository:
  merge-file: honor merge.conflictStyle outside of a repository
This commit is contained in:
Junio C Hamano
2026-02-17 13:30:41 -08:00
3 changed files with 44 additions and 7 deletions

View File

@@ -85,6 +85,9 @@ object store and the object ID of its blob is written to standard output.
--zdiff3::
Show conflicts in "zdiff3" style.
+
The `--diff3` and `--zdiff3` options default to the value of the
`merge.conflictStyle` configuration variable (see linkgit:git-config[1]).
--ours::
--theirs::

View File

@@ -60,7 +60,7 @@ static int diff_algorithm_cb(const struct option *opt,
int cmd_merge_file(int argc,
const char **argv,
const char *prefix,
struct repository *repo UNUSED)
struct repository *repo)
{
const char *names[3] = { 0 };
mmfile_t mmfs[3] = { 0 };
@@ -95,12 +95,10 @@ int cmd_merge_file(int argc,
xmp.style = 0;
xmp.favor = 0;
if (startup_info->have_repository) {
/* Read the configuration file */
repo_config(the_repository, git_xmerge_config, NULL);
if (0 <= git_xmerge_style)
xmp.style = git_xmerge_style;
}
/* Read the configuration file */
repo_config(repo, 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)

View File

@@ -428,6 +428,42 @@ 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 >expect <<-\EOF &&
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" >actual &&
test_cmp expect actual
'
test_expect_success 'marker size' '
cat >expect <<-\EOF &&
Dominus regit me,