gpt4 book ai didi

git - .gitattributes merge 策略不起作用

转载 作者:太空狗 更新时间:2023-10-29 14:11:25 29 4
gpt4 key购买 nike

我在 .gitattributes 中使用 merge 策略来在 merge 期间保留文件。我还使用 git config --global merge.ours.driver true; 在我的配置中设置驱动程序(我检查了 [merge "ours"] driver = true 的配置 它就在那里)。

我的 merge 策略设置正确:

src/public/bundle.js merge=ours
src/public/main.min.css merge=ours
server/middlewares/https_redirect.js merge=ours

然而,当我 merge 时,我仍然从正在 merge 的分支中获取文件。

我做错了什么?

最佳答案

你需要的是一个自定义的“merge 策略”

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

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

您的设置看起来确实正确(尽管有点“作弊”,使用 /bin/true 或内置的 shell 等同于只保留 %A 文件单独并成功退出:-))。但我怀疑您遇到了常见问题,即:

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

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

src/public/bundle.js 的基础版本是提交 bbbbbbb 中的版本。但是,也许从 bbbbbbb:src/public/bundle.js1111111:src/public/bundle.js 的差异是,而从 bbbbbbb:src/public/bundle.js2222222:src/public/bundle.js 的差异是非空

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

无论您是让 Git 使用它自己的内置 merge 代码,还是指定自定义驱动程序,这都是正确的:它从不打扰调用 merge 代码,只要它可以——或认为它可以——根本不进行 merge 就离开。它只采用一个更改后的版本并将其称为好版本。

(就我个人而言,我认为这是错误的/一个错误,但 Git 已经这样做了很多年,而且 Git 的人似乎不愿意改变它。)

关于git - .gitattributes merge 策略不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640602/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com