避免合并冲突的策略,例如在 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
中的提交描述。
所以:
- 忍受合并冲突
- 使用目录结构而不是单个平面文件
- 使用git日志
还有我们忽略的其他方法吗?
您还可以对单个文件使用 "union" 合并策略,如下所述:http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/
只需在 .gitattributes 中添加一行
ChangeLog.txt merge=union
经常附加或前置的文件有合并冲突的倾向。
例如我们在存储库的顶层有一个 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
中的提交描述。
所以:
- 忍受合并冲突
- 使用目录结构而不是单个平面文件
- 使用git日志
还有我们忽略的其他方法吗?
您还可以对单个文件使用 "union" 合并策略,如下所述:http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/
只需在 .gitattributes 中添加一行
ChangeLog.txt merge=union