theirs;;
This is opposite of 'ours'.
+renormalize;;
+ This runs a virtual check-out and check-in of all three stages
+ of a file when resolving a three-way merge. This option is
+ meant to be used when merging branches with different clean
+ filters or end-of-line normalization rules. See "Merging
+ branches with differing checkin/checkout attributes" in
+ linkgit:gitattributes[5] for details.
+
+no-renormalize;;
+ Disables the `renormalize` option. This overrides the
+ `merge.renormalize` configuration variable.
+
subtree[=path];;
This option is a more advanced form of 'subtree' strategy, where
the strategy makes a guess on how two trees must be shifted to
*/
add_files_to_cache(NULL, NULL, 0);
+ /*
+ * NEEDSWORK: carrying over local changes
+ * when branches have different end-of-line
+ * normalization (or clean+smudge rules) is
+ * a pain; plumb in an option to set
+ * o.renormalize?
+ */
init_merge_options(&o);
o.verbosity = 0;
work = write_tree_from_memory(&o);
o.subtree_shift = "";
else if (!prefixcmp(arg+2, "subtree="))
o.subtree_shift = arg + 10;
+ else if (!strcmp(arg+2, "renormalize"))
+ o.renormalize = 1;
+ else if (!strcmp(arg+2, "no-renormalize"))
+ o.renormalize = 0;
else
die("Unknown option %s", arg);
continue;
static const char **xopts;
static size_t xopts_nr, xopts_alloc;
static const char *branch;
+static int option_renormalize;
static int verbosity;
static int allow_rerere_auto;
return git_config_string(&pull_octopus, k, v);
else if (!strcmp(k, "merge.log") || !strcmp(k, "merge.summary"))
option_log = git_config_bool(k, v);
- else if (!strcmp(k, "merge.renormalize")) {
- merge_renormalize = git_config_bool(k, v);
- }
+ else if (!strcmp(k, "merge.renormalize"))
+ option_renormalize = git_config_bool(k, v);
return git_diff_ui_config(k, v, cb);
}
if (!strcmp(strategy, "subtree"))
o.subtree_shift = "";
+ o.renormalize = option_renormalize;
+
+ /*
+ * NEEDSWORK: merge with table in builtin/merge-recursive
+ */
for (x = 0; x < xopts_nr; x++) {
if (!strcmp(xopts[x], "ours"))
o.recursive_variant = MERGE_RECURSIVE_OURS;
o.subtree_shift = "";
else if (!prefixcmp(xopts[x], "subtree="))
o.subtree_shift = xopts[x]+8;
+ else if (!strcmp(xopts[x], "renormalize"))
+ o.renormalize = 1;
+ else if (!strcmp(xopts[x], "no-renormalize"))
+ o.renormalize = 0;
else
die("Unknown option for merge-recursive: -X%s", xopts[x]);
}
return 0;
}
-static int suggest_conflicts(void)
+static int suggest_conflicts(int renormalizing)
{
FILE *fp;
int pos;
"stopped before committing as requested\n");
return 0;
} else
- return suggest_conflicts();
+ return suggest_conflicts(option_renormalize);
}
index_fd = hold_locked_index(&index_lock, 1);
read_cache();
+
+ /*
+ * NEEDSWORK: cherry-picking between branches with
+ * different end-of-line normalization is a pain;
+ * plumb in an option to set o.renormalize?
+ * (or better: arbitrary -X options)
+ */
init_merge_options(&o);
o.ancestor = base ? base_label : "(empty tree)";
o.branch1 = "HEAD";
extern int fsync_object_files;
extern int core_preload_index;
extern int core_apply_sparse_checkout;
-extern int merge_renormalize;
enum safe_crlf {
SAFE_CRLF_FALSE = 0,
char *notes_ref_name;
int grafts_replace_parents = 1;
int core_apply_sparse_checkout;
-int merge_renormalize;
/* Parallel index stat data preload? */
int core_preload_index = 0;
o->buffer_output = 1;
o->diff_rename_limit = -1;
o->merge_rename_limit = -1;
- o->renormalize = merge_renormalize;
+ o->renormalize = 0;
git_config(merge_recursive_config, o);
if (getenv("GIT_MERGE_VERBOSITY"))
o->verbosity =