如何设置带有审阅者滞后时间(又名堆叠差异)的 Arcanist 工作流程?

Dou*_*las 5 git phabricator arcanist

我对 git 相当陌生,对 Phabricator 甚至更陌生,我试图在项目早期建立一个干净的工作流程。据我了解,使用 git 的正确做法是为每个功能创建一个新分支,在分支中实现它,然后将分支合并到 master 中。效果很好,没问题。

输入 Phabricator 并进行预推送代码审查。我创建一个分支,我们称之为“B”,实现一些东西,运行“arc diff”将其进入 Phabricator 的差异审查系统,等待批准,最后运行“arc land”推送到主存储库。到目前为止,一切都很好。但是,我不想在等待审稿人回复我的同时暂停进一步的开发。

因此,我正在审查我的提交,并且我想开始研究细化或依赖功能。我创建了一个分支,我们称之为“SB”,然后开始工作。我让 SB 准备好送审,但 B 尚未获得批准。“arc diff”看起来会将现有提交与我的新更改结合起来,这是我不想要的 - 这是一个新更改,而不是对旧更改的更新。我尝试“arc diff B”,它起作用了,我在 Differential 中得到了新的修订版,其中仅包含新的更改。B获得批准,我在B上运行“arc land”来提交。这有效。

SB获得批准,我在SB上运行“arc land”来提交。我收到一个使用异常 - Arcanist 将两个修订版视为在 SB 中而不是在 master 中。我尝试切换到 master 并运行更新,然后重试。同样的错误。我尝试使用 --revision 标志来实现这两个更改(即使其中之一确实已经实现)。我遇到合并冲突。我解决并提交合并冲突,然后重试。我再次遇到完全相同的合并冲突。

我最终想到了在 SB 上尝试 rebase 的想法,这最终让“arc land”正常工作。所以,我有一个技术上可行的解决方案,但这对我来说似乎很笨拙和尴尬。有没有更好的方法来避免手动变基的需要,只是为了让 Arcanist 认识到不,我已经着陆的修订版不是我现在着陆的一部分?

CEP*_*EPA 2

通常,使用 Arcanist,您将创建每个分支母版。这将防止第 3 段中描述的问题。

工作流程会是这样的:

  1. 拉取master当前的代码
  2. 用于arc branch B创建本地分支
  3. 对您的更改进行编码并用于arc diff比较您的代码
  4. 再次检查 master 并拉取当前代码
  5. 用于arc branch SB创建本地分支
  6. 对您的更改进行编码并用于arc diff比较您的代码

B一旦登陆到 master 上,仍然需要进行合并或变基。

如果您不想基于SBmaster 并且确实希望它基于 off B,那么您将需要通过使用指定基础arc diff B 这也将解决第 3 段中描述的问题。不幸的是,此选项不会阻止段落中的合并冲突4. 为了防止这种情况发生,您必须SB在着陆前重新设定基准。