我在.gitattributes中使用合并策略来在合并期间保留文件。我还使用List<string> myList = new List<string> { "Foo", "Foo", "Bar", "UniqueValue", "Bar" };
var listGrouped = myList.GroupBy( x => x, //the element you want to group by
(key, //the element you grouped by
element //the new list of strings grouped
)=> new
{
Key = key,
Count = element.Count()
});
foreach (var item in listGrouped)
{
Console.WriteLine("- - - - - - - -");
Console.WriteLine(item.Key);
Console.WriteLine(item.Count);
}
Console.ReadKey();
在我的配置中设置驱动程序(我检查了git config --global merge.ours.driver true;
的配置,它就在那里)。
我的合并策略设置正确:
[merge "ours"] driver = true
然而,当我合并时,我仍然从合并的分支中获取文件。
我可能做错了什么?
答案 0 :(得分:2)
请参阅git: How do I add a custom merge strategy?(编辑添加:编写合并策略处理程序比编写自定义合并驱动程序要困难得多。但这是获取我认为您想要的行为的唯一方法。)
你的设置似乎是正确的(虽然有点“作弊”,使用/bin/true
或内置的shell相当于只保留%A
文件并成功退出:-))。但我怀疑你正在与通常的问题发生冲突,这是:
如果要合并两个差异,Git只会调用三向合并驱动程序。
也就是说,假设我们实际上正在进行三向合并。这意味着存在某个文件的合并基础版本,例如src/public/bundle.js
,因为存在与两个分支提示提交不同的合并基础提交。我们在某个分支上,其提示提交为1111111
,我们正在合并其他一些其哈希ID为2222222
且git merge-base 1111111 2222222
为bbbbbbb
的提交。因此,Git已经git diff bbbbbbb 1111111
完成了从基础到我们的更改,git diff bbbbbbb 2222222
从基础到他们的更改。
src/public/bundle.js
的基本版本是提交bbbbbbb
中的版本。但是,从bbbbbbb:src/public/bundle.js
到1111111:src/public/bundle.js
的差异可能是为空,而从bbbbbbb:src/public/bundle.js
到2222222:src/public/bundle.js
的差异是非空< / em>的
在这种情况下,Git 不会对文件进行三向合并。它没有,所以它没有打扰。它根本不会调用您的自定义合并驱动程序;它只是获取文件的2222222
版本并说“我已经完成了,所有合并!”
无论你让Git使用自己的内置合并代码,还是指定一个自定义驱动程序,都是如此:当它可以 - 或者认为它可以 - 它根本不会困扰调用合并代码时没有完成合并就逃之夭夭。它只需要一个更改版本并称之为好。
(就我个人而言,我认为这是错误的/错误,但Git多年来一直这样做,而Git人似乎并不倾向于改变它。)