首页 > 解决方案 > 编辑不同行导致的 Git 绕过冲突

问题描述

我正在运行并行自动化脚本,这些脚本可以更改一个文件中的不同行并提交它。因为可能存在竞争条件,如果推送失败,每个脚本都会尝试拉取更改,因为另一个脚本可能同时对其进行了编辑:

while ! git push; do git pull; done

这似乎在大多数情况下都有效。我看到有时推送失败,拉取成功,然后再次推送。但有时它在拉取期间因冲突而失败:

 Auto-merging FILE
 CONFLICT (content): Merge conflict in FILE
 Automatic merge failed; fix conflicts and then commit the result.

对我来说,如果更改的行彼此相邻,似乎就会发生冲突。如果我确定每个脚本都有自己编辑的行并且没有发生实际冲突,是否有可能绕过这个冲突。

标签: bashgit

解决方案


如果更改了相邻的两条线,Git 确实会导致合并冲突。这是为了避免附近线路发生变化时出现意外,如本答案所述。这不能使用默认合并策略进行配置,但您可以使用自定义合并策略来避免它(这将是非常重要的实现)。

需要注意的是,如果您使用自动化来更改这样的存储库中的文件,则可能值得考虑是否应该首先将这些文件存储在 Git 存储库中。通常任何类型的数据文件都不属于存储库,应该存储在其他地方。


推荐阅读