2013-07-11 38 views
2

我在我的团队中使用Phabricator和Arcanist进行代码审查。 “弧地”命令非常棒,但有一种情况对我们不起作用。我们有一个单独的xml文件,其中包含一个链接列表(每个元素指向一个前一个元素)。我们不会经常更改这个文件,但偶尔我们会做。如果两个人在同一时间进行更改发生“无声的冲突”,意味着链接列表被破坏,因为这两个新元素链接到相同的前一个元素。这不是很难解决。但是git没有引发合并冲突。Phabricator奥术师弧地vs弧修正

所以当我们运行弧地,不正确的xml文件被自动推送。我们不希望这样。

会正确的动作是使用弧形修改,然后解决冲突手动后跟一个混帐推(像我们今天这样做,没有任何麻烦),或者你会如何建议与此前进?

回答

7

一些可能的想法:

  • 可以arc land --hold停止运行的git push之前,检查更改,然后手动运行git push
  • 在Git允许提交之前,您可以添加一个本地Git预提交钩子来验证XML文件。
  • 您可以在服务器上添加一个预接收挂钩,以在将XML文件推送到远程设备之前对其进行验证。
  • 您可以使用gitattributes中的merge指令覆盖Git的合并行为,并将默认合并替换为正确合并(或无法合并)的合并行为。
  • 您可以尝试用某种格式的数据替换XML文件,该格式不具有这些不合意的合并属性,因为此问题是一般性问题。
  • 您可以通过在文件中包含一些始终发生冲突的字符串来强制合并失败。例如,像lastNode="whatever"新增属性的容器元素(即,总是在1号线或其他),这样两个编辑将被命名不同的最后节点(以确保这是编辑在该行总是冲突,你可以检查在运行时lastNode是正确的)。如果文件是自动生成的,你可以简单地在一个众所周知的线上发表评论。
+0

太棒了! “arc land --hold”现在是有意义的。预先接收的钩子(太多不同的本地设置依赖于预提交钩子),验证XML文件是合乎逻辑的下一步骤。这从来没有成为一个大问题,因为该文件是手动编辑,即使是新员工也无需任何介绍即可轻松理解和修复。但是在弧形的土地上,我看到人们忘记了这一点。 –