2014-09-28 26 views
3

我对git相当陌生,甚至对Phabricator更新,我试图在我的项目早期建立一个干净的工作流程。据我了解,与git做适当的事情是为每个功能创建一个新的分支,在分支中实现它,然后将分支合并到主。很好,没问题。如何设置Arcanist工作流与审阅者滞后时间?

输入Phabricator和预推代码评论。我创建了一个分支,让我们称之为“B”,实现一些东西,运行“arc diff”将其纳入Phabricator的差异审查系统,等待审批,最后运行“arc land”以推送到主存储库。到现在为止还挺好。但是,我不想在等待审稿人回复我的过程中暂停进一步的开发。

所以,我有我的提交审查,并且我想开始工作在一个改进或依赖功能。我创建了一个子分支,我们称它为“SB”,然后开始工作。我得到SB准备发送审查,并且B尚未批准。 “arc diff”看起来像将现有的提交和我不想要的新更改结合在一起 - 这是一个新的更改,而不是旧的更新。我尝试使用“arc diff B”,并且它工作正常,我在Differential中得到一个新的修订版本,其中只包含新的更改。 B获得批准,并且我运行B上的“arc land”以提交它。这工作。

SB获得批准,我运行SB上的“弧形土地”提交它。我得到一个用法例外 - Arcanist将这两个修订都视为在SB中,而不是在master中。我尝试切换到master并运行更新,然后再次尝试。同样的错误。我尝试用--revision标志着陆两个变化(即使其中一个已经真正登陆了)。我遇到合并冲突。我解决并提交合并冲突并重试。我再次得到完全相同的合并冲突。

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

+0

这个问题似乎是从我的脑海里拿出来放在这里。我只是处于相同的情况。你终于找到了一个更好的工作流程? – Apperside 2016-10-30 18:43:52

+0

@Apperside不幸的是没有。我只是习惯于在每次着陆之前将SB重新贴在主人身上。 – Douglas 2016-10-30 20:35:02

+0

我们可以去火星,我们不能这样做,多么可耻!无论如何感谢您的回答 – Apperside 2016-10-31 08:56:14

回答

2

通常,使用Arcanist时,您将创建每个分支。这将防止3.

工作流程会喜欢这样的一段描述的问题:

  1. 拉主人的当前代码
  2. 使用arc branch B创建一个本地分支
  3. 代码的更改,并使用arc diff来区别您的代码
  4. 再次结帐并重新提取当前代码
  5. 使用arc branch SB创建本地分支
  6. 代码的更改,并使用arc diff差异比较你的代码

仍然会有合并或衍合那些需要一次发生B被降落到主。

如果你不想基地SB关老爷真的想关闭它基于B,那么你就需要使用arc diff B这也将解决部分第3段不幸的是描述的问题,这个选项将指定基不会阻止第4段中的合并冲突。您必须在登陆前重新绑定SB以防止这种冲突。

+0

看来你几乎告诉我,我已经做出的是我能做的最好的。真的没有办法配置Arcanist自动处理这些问题吗? – Douglas 2014-09-30 06:11:59

+0

为了在子分支上获得正确的比较基础,我在https://secure.phabricator.com/book/phabricator/article/arcanist_commit_ranges/找到的git:branch-unique(*)规则的文档看起来很有希望,但我试过的所有变化都没有奏效。 对于登陆子分支,是否没有办法让Arcanist自动进行适当的rebase,比如说在登陆父分支时重新绑定所有子分支? – Douglas 2014-09-30 06:17:56