2011-05-31 68 views
10

假设我的主分支(devlop)和我的功能分支都有活动开发。两者都在不断增加迁移。在将特性分支合并到主分支之前,我将把它重新绑定到主分支上。更新功能分支中的迁移时间戳

因此,只有在最新的分支迁移后才能实现所有功能分支迁移。

是否有一个方便/建议的方式来重命名这些文件?我可以生成虚拟迁移并重新使用为他们生成的时间戳 - 但我想知道是否存在我不知道的最佳/常见做法?

+1

只是一个问题:你为什么需要这样做?无论时间戳如何,Rails仍将迁移它们。不知道最佳实践,但现行做法只是让他们一个人留下来,让他们留下他们的时间戳。 – 2011-05-31 09:39:20

+0

你说得很好。有可能功能分支中的一个迁移可能依赖于开发中的迁移,尽管这不会经常发生,因为根据定义,它是在开发中的新迁移之前编写的。所以也许答案就是在明确需要时使用我的重命名解决方案。 – 2011-05-31 21:06:18

+0

经常发生的情况是,人们从树干反向合并到功能分支中以使分支保持最新(以避免可怕的合并在完成时以其他方式)。所以功能分支很可能取决于在主干中开发的代码......而不是相反。 – 2011-06-01 09:46:10

回答

1

正如您对问题的评论所述,不需要更改文件名。

还有人提到,在其他迁移存在之前,通常不会发生迁移写入(取决于其他迁移)。 (如果确实如此,你就没有做对)。所以这个需求不应该出现。

在极少数情况下,功能开发人员想要合并多个迁移(在功能迁移之间有一个中继迁移),他应该将这些迁移合并为一个新迁移(或最后一个迁移)。无论如何,功能开发者有责任确保符合条件。

这样做也会对其他开发者造成一些恼人的副作用。由于schema_migrations中的时间戳不可用,相同的迁移将再次在其数据库上运行。

+0

我想说“你做得不对”是一个笼统的概括。我们经常有一个案例,我们开始一个迁移的工作,然后意识到有一个先决条件的变化,所以我们必须产生另一个并在此之前进入。 – lobati 2014-05-29 19:10:45

+0

应该不会发生这样的情况:在分支点之后,功能分支依赖于开发分支中的迁移。在功能分支上可能发生的情况是,您想“预先”迁移 - 我同意 - 但这不是问题。 – 2014-06-10 07:11:58

+0

我不知道我明白你在说什么。下面是一个用例:通常当我们编写一个功能分支时,我们需要进行一次迁移,添加一列并用其他字段和表中的一些数据填充。但是在这个过程中,我们意识到源数据在某种程度上是无效的,所以我们去做一个新的特性分支来清理数据并添加一些约束条件,合并,然后返回到我们原来的特性分支并继续工作从那里。你是说这是错的吗? – lobati 2014-06-10 15:00:30

1

我还没有找到一个轨道功能来为你做这件事,但它会很高兴有一个migration touch命令或什么的。无论如何,我们现在所做的只是产生一个新的迁移,复制时间戳并重命名旧的迁移。通常,迁移足够独立,顺序无关紧要,但偶尔我们会遇到顺序依赖关系,因此我们需要更新时间戳。

+0

Heres a [gist](https://gist.github.com/craigweston/6e64f6677b281a3d7534fb8d30152341)用于您描述的迁移触摸命令。它将文件名更新为最新版本,在旧版本上调用db:migrate:down,在新版本上调用db:migrate:up。 – cweston 2016-04-07 13:57:18