bash - 编辑不同行导致的 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.
对我来说,如果更改的行彼此相邻,似乎就会发生冲突。如果我确定每个脚本都有自己编辑的行并且没有发生实际冲突,是否有可能绕过这个冲突。
解决方案
如果更改了相邻的两条线,Git 确实会导致合并冲突。这是为了避免附近线路发生变化时出现意外,如本答案所述。这不能使用默认合并策略进行配置,但您可以使用自定义合并策略来避免它(这将是非常重要的实现)。
需要注意的是,如果您使用自动化来更改这样的存储库中的文件,则可能值得考虑是否应该首先将这些文件存储在 Git 存储库中。通常任何类型的数据文件都不属于存储库,应该存储在其他地方。
推荐阅读
- python - 当我添加 UDP 代码时,pyqtgraph 和 python 冻结
- laravel - laravel 分析中“Period::days(1)”的时间段是多少?
- python - Ctx 是缺少 discrd.py 的必需参数
- python - 使用线程继承限制线程数
- php - 模型检索数据丢失的蛋糕 PHP 2.10 内部连接?
- swift - 当键盘隐藏在swift中时增加inputAccessoryView的高度
- angular - 如何在图表js中对齐网格线上的条形图
- reactjs - React 测试库模拟 rxjs webSocket
- javascript - 有没有办法改变 context.scale 的缩放方式?
- curl - 当我执行 curl 命令时收到“消息”:“禁止,错误:代码 = 403,消息 = 禁止”