From 4c371f91270792791f867d15f25b03f800ab35a1 Mon Sep 17 00:00:00 2001 From: Matthieu Moy Date: Sun, 22 Nov 2009 23:26:17 +0100 Subject: [PATCH] merge-recursive: point the user to commit when file would be overwritten. The commit-before-pull is well accepted in the DVCS community, but is confusing some new users. This should get them back in the right way when the problem occurs. Signed-off-by: Matthieu Moy Signed-off-by: Junio C Hamano --- Documentation/config.txt | 4 ++++ advice.c | 2 ++ advice.h | 1 + merge-recursive.c | 8 +++++++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index cd1781498..0b550dc49 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -126,6 +126,10 @@ advice.*:: Directions on how to stage/unstage/add shown in the output of linkgit:git-status[1] and the template shown when writing commit messages. Default: true. + commitBeforeMerge:: + Advice shown when linkgit:git-merge[1] refuses to + merge to avoid overwritting local changes. + Default: true. -- core.fileMode:: diff --git a/advice.c b/advice.c index ae4b1e81d..cb666acc3 100644 --- a/advice.c +++ b/advice.c @@ -2,6 +2,7 @@ int advice_push_nonfastforward = 1; int advice_status_hints = 1; +int advice_commit_before_merge = 1; static struct { const char *name; @@ -9,6 +10,7 @@ static struct { } advice_config[] = { { "pushnonfastforward", &advice_push_nonfastforward }, { "statushints", &advice_status_hints }, + { "commitbeforemerge", &advice_commit_before_merge }, }; int git_default_advice_config(const char *var, const char *value) diff --git a/advice.h b/advice.h index e9df8e026..3de5000d8 100644 --- a/advice.h +++ b/advice.h @@ -3,6 +3,7 @@ extern int advice_push_nonfastforward; extern int advice_status_hints; +extern int advice_commit_before_merge; int git_default_advice_config(const char *var, const char *value); diff --git a/merge-recursive.c b/merge-recursive.c index f55b7ebe1..1870448d9 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -3,6 +3,7 @@ * Fredrik Kuivinen. * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006 */ +#include "advice.h" #include "cache.h" #include "cache-tree.h" #include "commit.h" @@ -170,7 +171,7 @@ static int git_merge_trees(int index_only, int rc; struct tree_desc t[3]; struct unpack_trees_options opts; - static const struct unpack_trees_error_msgs msgs = { + struct unpack_trees_error_msgs msgs = { /* would_overwrite */ "Your local changes to '%s' would be overwritten by merge. Aborting.", /* not_uptodate_file */ @@ -182,6 +183,11 @@ static int git_merge_trees(int index_only, /* bind_overlap -- will not happen here */ NULL, }; + if (advice_commit_before_merge) { + msgs.would_overwrite = msgs.not_uptodate_file = + "Your local changes to '%s' would be overwritten by merge. Aborting.\n" + "Please, commit your changes or stash them before you can merge."; + } memset(&opts, 0, sizeof(opts)); if (index_only) -- 2.26.2