如何配置arc land校验本地与Phabricator评审版本一致
结论
这个需求完全可以实现,靠Arcanist自带的配置项就能做到,不需要修改工具源码。
默认逻辑的问题
默认状态下arc land的拦截规则只检查待合入的提交里有没有没关联Phabricator评审的新提交哈希:
- 你用
--amend追加修改的时候,是直接改了原提交的内容,没有生成新的提交哈希,默认规则识别不到内容变更,就会把没走评审的代码直接放行合入master - 如果你不用amend,而是新建一个独立提交,新提交的哈希没绑定对应评审单,就会触发默认的版本不匹配报错,拦截操作。
具体配置方式
打开项目根目录下的.arcconfig文件(如果要全局生效就修改用户目录下的Arcanist全局配置),加入如下配置项:
{ "land.require-matching-diff": true }
生效后的表现
配置打开后,arc land会在原有提交哈希校验的基础上,额外增加一层内容一致性校验:
- 合入前会逐字节对比本地待合入的代码,和Phabricator上对应评审单最新的、已经走完评审流程的diff内容是否完全一致
- 不管你是新建了没走评审的独立提交,还是用
--amend修改了原来已经提过评审的提交,只要两边内容不匹配,就直接报错拦截,提示你必须先执行arc diff把新修改同步到评审单、走完评审流程才能继续合入 - 只有本地代码和平台上评审通过的版本完全一致时,
arc land才会正常执行合入操作,把代码合并到master分支。
补充说明
这个配置对项目所有成员生效,开启前建议同步给团队其他成员:后续不管修改量大小,只要amend了提交,都得重新更新评审单,不能改完直接land,避免大家操作时被拦截影响效率。
内容的提问来源于stack exchange,提问作者tgeng
相关产品推荐
相关产品推荐

