version-control - 避免合并冲突的策略,例如在git中

标签 version-control merge-conflict-resolution

定期附加或前置的文件容易发生合并冲突。

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

(我们还有一个 UpgradeDatabaseSchema.pm perl 库,同样有 N 个条目。版本也往往会出现合并冲突,但让我们继续使用 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 中跟踪/提交 ChangeLog.txt)。这有点麻烦...

我们还短暂考虑过使用 git log 而不是 ChangeLog.txt,但不会,因为受众不同:git log 是为开发人员准备的,而 ChangeLog.txt 供客户使用。此外,如果不更改 git 历史记录并破坏每个人的分支,就无法轻松更改 git log 中提交的描述。

所以:

  • 接受合并冲突
  • 使用目录结构而不是单个平面文件
  • 使用 git 日志

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

最佳答案

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

只需向 .gitattributes 添加一行

ChangeLog.txt merge=union

关于version-control - 避免合并冲突的策略,例如在git中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636177/

相关文章:

git - 为什么 git 显示两个明显相同的添加文件之间存在冲突?

java - 如何在构建步骤中配置自动提交

version-control - 单个代码库多个网站

java - 如何将具有状态的对象置于版本控制之下?这还有道理吗?

mercurial - 如何告诉 Mercurial 在特定目录中任何文件的 merge 冲突期间自动接受 "their"版本?

git - 如何将我的 git merge 冲突转换为类似 diff 的格式?

Mercurial,冲突, merge ,以后的其他冲突,Mercurial还记得最初的解决方案吗?

git - 共享 rerere 缓存

git - 多次提交后创建 git 分支

git - 如何找出正在进行的 merge 的父修订?