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

Version control 避免合并冲突的策略,例如在git中,version-control,merge-conflict-resolution,Version Control,Merge Conflict Resolution,附加或前置的文件通常有合并冲突的倾向 例如,我们在存储库的顶层有一个ChangeLog.txt文件。每当有人做出重大更改时,都会在ChangeLog.txt前面添加对客户友好的更改描述。这会导致频繁的合并冲突,因为不同的开发人员合并单独的更改,或者单个开发人员重新设置基础并更改提交顺序,从而ChangeLog.txt更改顺序 (我们还有一个UpgradeDatabaseSchema.pmperl库,它同样有N个条目,pr.version也有合并冲突,但是让我们继续使用ChangeLog.txt)

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

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

(我们还有一个
UpgradeDatabaseSchema.pm
perl库,它同样有N个条目,pr.version也有合并冲突,但是让我们继续使用
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日志
还有其他我们忽略的方法吗?

您也可以对单个文件使用“联合”合并策略,如下所述:

只需在.gittributes中添加一行即可

ChangeLog.txt merge=union