微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止自动更改日志合并

如何解决防止自动更改日志合并

我有以下设置:

前提: 更改日志保存在开发分支中名为 CHANGELOG.md 的文件中,部分如下所示:

## [Unreleased]
- Feature2

## [1.0.0]
- Feature1

然后我创建了它的一个功能分支。 在功能分支中,更改日志中添加了新功能 3:

## [Unreleased]
- Feature2
- Feature3

## [1.0.0]
- Feature1

之后从开发分支发布并合并回它,看起来像这样:

## [Unreleased]

## [1.1.0]
- Feature2

## [1.0.0]
- Feature1

如果我现在将开发分支合并到功能分支中,CHANGELOG.md 文件自动合并(没有冲突),看起来像:

## [Unreleased]

## [1.1.0]
- Feature2
- Feature3

## [1.0.0]
- Feature1

问题自动合并将 Feature3 放在错误的位置(低于 1.1.0 而不是 Unreleased)。为了防止这种情况,我只找到了一个解决方案:在 .gitattributes 中将此文件标记为二进制文件(以始终引发冲突)。 但是 .gitattributes 不会被 GitHub 评估。

问题:保留更新日志,Git 和 GitHub 似乎是最先进的。为什么其他人没有同样的问题?至少我找不到任何关于它的问题或解决方案。

更让我困惑的是:很多人问的问题与我的问题相反。他们遇到了冲突,并希望使用 merge=union 自动合并它。 是我误解了什么还是我的方法有问题?

解决方法

这就是所谓的语义冲突。代码正确合并没有冲突,但结果不是你想要的。不幸的是,由于 Git 并非无所不知,它无法知道您的意图,因此有时会发生这些事情。

即使 GitHub 确实支持 merge=binary,您也不希望出现这种行为,因为这实际上意味着每次在主分支和功能分支上更改文件时,合并更改日志都会导致冲突.这在繁忙的项目中会非常不方便。

一般来说,变更日志在这种情况下很棘手,不仅因为它们容易出现语义冲突,而且更多时候,由于多个 PR 包括同一位置的行,它们只会遇到实际冲突。因此,您可能希望从其他来源生成变更日志,或者使用 an approach similar to how GitLab does it 并为每个条目使用一个文件,在发布前将它们全部累积到变更日志中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。