避免合并冲突的策略,例如在 git

Strategies for avoiding merge conflicts, e.g. in git

经常附加或前置的文件有合并冲突的倾向。

例如我们在存储库的顶层有一个 ChangeLog.txt 文件。每当有人进行重大更改时,都会在 ChangeLog.txt 前面添加对客户友好的更改说明。这会导致频繁的合并冲突,因为不同的开发人员合并单独的更改,或者单个开发人员变基并更改提交顺序,从而 ChangeLog.txt 更改顺序。

(我们还有一个 UpgradeDatabaseSchema.pm perl 库,它同样有 N 个条目 pr. 版本也往往有合并冲突,但让我们坚持使用 ChangeLog.txt)。

如何很好地避免这种合并冲突?

我唯一想出的是一个目录结构,我们不是提交 ChangeLog.txt,而是将条目提交到单独文件中的 changeLog 目录:

changeLog/
    v1.1/
        fooFeature.txt
        bug-4524-fix.txt
        refactoredWhatever.txt
    v1.2/
        bug-4522-fix.txt
        barFeature.txt
        removedFoobar.txt

然后让 ChangeLog.txt 从例如以某种方式连接这些文件(而不是 git 中的 tracking/committing ChangeLog.txt)。这个有点麻烦...

我们也曾短暂地考虑过只使用 git log 而不是 ChangeLog.txt,但不会因为受众不同:git 日志是针对开发人员的,而 ChangeLog.txt 是给客户的。此外,如果不改变 git 历史并为每个人打破分支,就无法轻易更改 git log 中的提交描述。

所以:

还有我们忽略的其他方法吗?

您还可以对单个文件使用 "union" 合并策略,如下所述:http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/

只需在 .gitattributes 中添加一行

ChangeLog.txt merge=union