我在.gitattributes中使用了合并策略来在合并期间保存文件。我还使用git config --global merge.ours.driver true;在我的配置中设置驱动程序(我检查了[merge "ours"] driver = true的配置,它就在那里)。
正确设置了合并策略:
src/public/bundle.js merge=ours
src/public/main.min.css merge=ours
server/middlewares/https_redirect.js merge=ours然而,当我合并时,我仍然从被合并的分支获取文件。
我做错什么了?
发布于 2017-01-13 20:27:27
您需要的是自定义的“合并策略”。
请参阅git: How do I add a custom merge strategy? (编辑添加:编写合并策略处理程序要比编写自定义合并驱动程序困难得多。但这是得到我相信你想要的行为的唯一方法。
您所拥有的是一个自定义合并驱动程序。
您的设置看起来确实是正确的(尽管有点“欺骗-y”,使用/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的差异是非空的。
在这种情况下,Git不会对文件进行三向合并。没必要,所以就不麻烦了。它根本不调用您的自定义合并驱动程序;它只是获取文件的2222222版本,并说“我完成了,全部合并了!”
不管是让Git使用它自己的内置合并代码,还是指定一个自定义驱动程序,这都是正确的:当Git可以(或者认为它可以)完全不进行合并的时候,它根本不需要调用合并代码。它只是采取了一个改变的版本,并称其良好。
(就我个人而言,我认为这是错误/错误,但Git多年来一直是这样做的,Git的人似乎不愿意改变它。)
https://stackoverflow.com/questions/41640602
复制相似问题