如何使用递归策略提供的耐心选项将分支与git合并?我正在使用 git版本1.7.3.1.msysgit.0
即使是文档也不一致,而且与实际命令输出的不同。
git merge [-s
<strategy>
] [-X<strategy-option>
]<commit>
并在文中进一步说明:
-X
<option>
(没有空格)
命令输出说:
-X, --strategy-option <option=value>
option for selected merge strategy
所以我尝试了几个版本,结果如下:
$ git merge -s recursive -Xpatience sourceBranch
fatal: Unknown option for merge-recursive: -Xpatience
$ git merge -X patience sourceBranch
fatal: Unknown option for merge-recursive: -Xpatience
$ git merge -Xpatience sourceBranch
fatal: Unknown option for merge-recursive: -Xpatience
$ git merge --strategy-option patience sourceBranch
fatal: Unknown option for merge-recursive: -Xpatience
$ git merge -X option=patience sourceBranch
fatal: Unknown option for merge-recursive: -Xoption=patience
$ git merge --strategy-option option=patience sourceBranch
fatal: Unknown option for merge-recursive: -Xoption=patience
$ git merge option=patience sourceBranch
fatal: 'option=patience' does not point to a commit
$ git merge -X option=patience sourceBranch
fatal: Unknown option for merge-recursive: -Xoption=patience
看起来该选项未实现......
答案 0 :(得分:30)
--patience
的{{1}}选项已在提交58a1ece478c6038a7eb0b6e494d563bd5e6d5978
中引入。您可以在git merge-recursive
的克隆中找到包含此更改的版本git.git
:
git tag --contains 58a1ece478
所以我怀疑你只是使用了一个稍微过旧版本的mSysGit。现在有1.7.4的预览版本 - 我想你应该尝试一下。
我刚刚尝试使用git 1.7.4版本,以下命令行语法适用于我:
v1.7.4
v1.7.4-rc0
v1.7.4-rc1
v1.7.4-rc2
v1.7.4-rc3
v1.7.4.1
答案 1 :(得分:3)
我see here the patch在递归合并策略中引入了耐心选项,基于Git1.7.2.2,但我没有在随后的任何发行说明中看到它。
然而耐心差异算法自2009年开始提出,并且是detailed here。
> grep -i patience *.c
diff.c: else if (!strcmp(arg, "--patience"))
diff.c: DIFF_XDL_SET(options, PATIENCE_DIFF);
merge-recursive.c: else if (!strcmp(s, "patience"))
merge-recursive.c: o->xdl_opts |= XDF_PATIENCE_DIFF;
merge命令应该理解这个选项...但是下面的这个函数似乎永远不会被调用(不是merge-recursive.c
或任何其他*.c
文件中的任何地方!):
int parse_merge_opt(struct merge_options *o, const char *s)
{
if (!s || !*s)
return -1;
if (!strcmp(s, "ours"))
o->recursive_variant = MERGE_RECURSIVE_OURS;
else if (!strcmp(s, "theirs"))
o->recursive_variant = MERGE_RECURSIVE_THEIRS;
else if (!strcmp(s, "subtree"))
o->subtree_shift = "";
else if (!prefixcmp(s, "subtree="))
o->subtree_shift = s + strlen("subtree=");
else if (!strcmp(s, "patience"))
o->xdl_opts |= XDF_PATIENCE_DIFF;
else if (!strcmp(s, "ignore-space-change"))
o->xdl_opts |= XDF_IGNORE_WHITESPACE_CHANGE;
else if (!strcmp(s, "ignore-all-space"))
o->xdl_opts |= XDF_IGNORE_WHITESPACE;
else if (!strcmp(s, "ignore-space-at-eol"))
o->xdl_opts |= XDF_IGNORE_WHITESPACE_AT_EOL;
else if (!strcmp(s, "renormalize"))
o->renormalize = 1;
else if (!strcmp(s, "no-renormalize"))
o->renormalize = 0;
else if (!prefixcmp(s, "rename-threshold=")) {
const char *score = s + strlen("rename-threshold=");
if ((o->rename_score = parse_rename_score(&score)) == -1 || *score != 0)
return -1;
}
else
return -1;
return 0;
}
“未知选项”错误消息仅由handle_options
中的git.c
功能打印。
并且XDF_PATIENCE_DIFF
没有在git源代码中显示任何其他内容(1.7.4)......所以是的,我不知道如何为合并实现这一点。