如何让多台机器与South和Git保持同步

时间:2011-12-21 15:59:38

标签: python django git django-south

所以,虽然我喜欢南方,但我对这个特定的工作流程一直存在问题:

  • 在机器A上迁移几次
  • 定期将更改推送到Git
  • 经过很长一段时间后,返回机器B
  • 从Git拉出来并且迁移会为机器B抛出各种错误

这些错误通常是“表已存在”错误。

现在我已经阅读了大量的博客文章和堆栈问题,坦率地说,似乎没有一个明确的答案,如何正确检查迁移文件(以及你是否应该),以及如何真正整合南与Git。

我正在寻找的是如何将Git和South正确地结合在一起的详细介绍,并展示两台机器之间的工作流程。

目前,我需要做的是,在一段时间后彻底清除迁移文件夹并从头开始。这似乎不是处理事情的好方法。

2 个答案:

答案 0 :(得分:1)

我很想知道有关提交南迁移文件的疑问。我当然不知道你不会有任何暗示。

使用您的工作流程,您无需指定计算机A和B是使用相同还是不同的数据库。如果两台机器之间的代码差别很大,那么它们应该使用不同的数据库。如果数据库模式超出代码,那么您将收到错误。显然,架构无法落后于代码,因为在代码更新后应始终运行migrate

我的工作流程如下:

A: create schema migrations and apply as they are created.
A: add schema migration files to subversion and commit
B: svn up
B: python manage.py migrate
B: continue coding!

由于迁移文件可以包含转换数据库中数据的代码,因此您不应删除迁移,因为您将丢失该代码。我有一个三人开发团队,他们已经创建了80多个迁移,并且没有遇到任何形容问题。

答案 1 :(得分:1)

问题

当两个人创建迁移而没有彼此同步时,会显示南方和团队工作流程。

想象一下,我们有一些回购。人员A和B克隆它,然后更改一些模型,创建迁移,然后将其全部推回。我们将在回购中进行2次具有相同编号的迁移。

如果你试图以这样的历史进行迁移,南方会抱怨。

Inconsistent migration history
The following options are available:
   --merge: will just attempt the migration ignoring any potential dependency conflicts.

如南方文档http://south.readthedocs.org/en/latest/tutorial/part5.html中所述,您可以尝试使用--merge选项,南方将尝试合并迁移。如果冲突的迁移改变了相同的模型,它将失败。

./manage.py schemamigration --auto --merge appname 

因此,团队的主要规则是:一次只有一个开发人员可以更改一个模型。如果有人开始更改模型,那么在他们拥有最新的迁移文件之前,没有人应该触摸它。

南方和多个git分支的团队工作流规则:

  1. 在对模型进行更改之前,请检查是否有人在那里进行了更改
  2. 尽快通知其他成员有关您的更改
  3. 尽快同步您的迁移目录
  4. 同样来自南方文档: 当你通过他们自己的迁移引入其他人的模型更改时,你需要进行一个新的空迁移,其中包含两个开发分支的更改被冻结(如果你使用了mercurial,这相当于一个合并提交)。为此,只需运行:

     ./manage.py schemamigration --empty appname merge_models
    

    merge_models只有新的迁移名称

    使用南部和单个git分支的团队工作流规则:

    如果您的所有团队成员都致力于单一分支,那么最佳策略将是首先进行模型更改,进行迁移并尽快推送。然后处理其他代码。

    这篇文章对你来说也很有趣:

    http://andrewingram.net/2012/dec/common-pitfalls-django-south/ http://anthony-tresontani.github.io/Django/2013/03/15/south-workflow/