分支提前判断存在冲突的两种方案
git命令
找到两个分支之间最好的公共祖先base_sha
base_sha = git merge-base origin/{source} origin/{target}通过`git merge-tree {base_sha} {source} {target}`获取合并后的结果
git merge-tree {base_sha} origin/{source} origin/{target}如果输出有`changed in both`字样,那说明存在冲突
借助GitLab Api判断
示例代码如下
# 检查合并冲突,借助gitlab的发起mr来判断 def checkConflicts(self, source, target, title): mr = self.createMr(source, target, title, None) if mr is None: return False elapsed = 0 while True: mr = self.getMr(mr.iid) status = mr.merge_status if status == 'can_be_merged': self.deleteMr(mr) return False if status in ['cannot_be_merged', 'cannot_be_merged_recheck']: self.deleteMr(mr) return True if elapsed > 30: self.deleteMr(mr) return True elapsed += 3 time.sleep(3)
评论区