Configuration variable merge.overwritesamecontent corresponding to the --overwrite-same-content option. This allow merge to overwrite untracked files that have the same content, a configuration variable is interressant because some people may want this activated as default to not have to use the option every time Signed-off-by: Jonathan Bressat <git.jonathan.bressat@xxxxxxxxx> Signed-off-by: COGONI Guillaume <cogoni.guillaume@xxxxxxxxx> --- Documentation/config/merge.txt | 5 +++++ builtin/merge.c | 2 ++ t/t7615-merge-untracked.sh | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/Documentation/config/merge.txt b/Documentation/config/merge.txt index 99e83dd36e..2824dd19c7 100644 --- a/Documentation/config/merge.txt +++ b/Documentation/config/merge.txt @@ -89,6 +89,11 @@ merge.autoStash:: `--autostash` options of linkgit:git-merge[1]. Defaults to false. +merge.overwritesamecontent:: + When set to true, it will modify the behavior of git merge + to overwrite untracked files that have the same name and + content than files in the merged commit. + merge.tool:: Controls which merge tool is used by linkgit:git-mergetool[1]. The list below shows the valid built-in values. diff --git a/builtin/merge.c b/builtin/merge.c index fffae81068..936cb8480d 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -658,6 +658,8 @@ static int git_merge_config(const char *k, const char *v, void *cb) } else if (!strcmp(k, "merge.autostash")) { autostash = git_config_bool(k, v); return 0; + } else if (!strcmp(k,"merge.overwritesamecontent")) { + overwrite_same_content = git_config_bool(k, v); } status = fmt_merge_msg_config(k, v, cb); diff --git a/t/t7615-merge-untracked.sh b/t/t7615-merge-untracked.sh index 05a34cf03f..cfefd8f473 100755 --- a/t/t7615-merge-untracked.sh +++ b/t/t7615-merge-untracked.sh @@ -60,4 +60,25 @@ test_expect_success 'merge fail when tracked file modification is unstaged' ' test_must_fail git merge --overwrite-same-content B ' +test_expect_success 'fastforward overwrite untracked file that has the same content with the configuration variable' ' + test_when_finished "git branch -D B && git reset --hard init && git clean --force" && + test_config merge.overwritesamecontent true && + git checkout -b B && + test_commit --no-tag "tracked" file "content" && + git checkout A && + echo content >file && + git merge B +' + +test_expect_success 'normal merge overwrite untracked file that has the same content with the configuration variable' ' + test_when_finished "git branch -D B && git reset --hard init && git clean --force" && + test_config merge.overwritesamecontent true && + git checkout -b B && + test_commit --no-tag "tracked" file "content" fileB "content" && + git switch A && + test_commit --no-tag "exA" fileA "content" && + echo content >file && + git merge B +' + test_done -- 2.35.1.10.g88248585b1.dirty