.gitattributes合并策略不起作用

时间:2017-01-13 17:51:52

标签: git github git-merge

我在.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

然而,当我合并时,我仍然从合并的分支中获取文件。

我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

您需要的是自定义“合并策略”

请参阅git: How do I add a custom merge strategy?(编辑添加:编写合并策略处理程序比编写自定义合并驱动程序要困难得多。但这是获取我认为您想要的行为的唯一方法。)

您拥有的是自定义合并驱动程序

你的设置似乎是正确的(虽然有点“作弊”,使用/bin/true或内置的shell相当于只保留%A文件并成功退出:-))。但我怀疑你正在与通常的问题发生冲突,这是:

如果要合并两个差异,Git只会调用三向合并驱动程序。

也就是说,假设我们实际上正在进行三向合并。这意味着存在某个文件的合并基础版本,例如src/public/bundle.js,因为存在与两个分支提示提交不同的合并基础提交。我们在某个分支上,其提示提交为1111111,我们正在合并其他一些其哈希ID为2222222git merge-base 1111111 2222222bbbbbbb的提交。因此,Git已经git diff bbbbbbb 1111111完成了从基础到我们的更改,git diff bbbbbbb 2222222从基础到他们的更改。

src/public/bundle.js的基本版本是提交bbbbbbb中的版本。但是,从bbbbbbb:src/public/bundle.js1111111:src/public/bundle.js的差异可能是为空,而从bbbbbbb:src/public/bundle.js2222222:src/public/bundle.js的差异是非空< / em>的

在这种情况下,Git 不会对文件进行三向合并。它没有,所以它没有打扰。它根本不会调用您的自定义合并驱动程序;它只是获取文件的2222222版本并说“我已经完成了,所有合并!”

无论你让Git使用自己的内置合并代码,还是指定一个自定义驱动程序,都是如此:当它可以 - 或者认为它可以 - 它根本不会困扰调用合并代码时没有完成合并就逃之夭夭。它只需要一个更改版本并称之为好。

(就我个人而言,我认为这是错误的/错误,但Git多年来一直这样做,而Git人似乎并不倾向于改变它。)