我正在做一个web应用程序,我需要为一些主要的更改做一个分支,事情是,这些更改需要更改数据库模式,所以我想把整个数据库放在git下。

我怎么做呢?是否有一个特定的文件夹,我可以保存在git存储库下?我怎么知道是哪个?我如何确定我放入了正确的文件夹?

我需要确定,因为这些更改是不向后兼容的;我可不能搞砸。

在我的例子中,数据库是PostgreSQL

编辑:

有人建议进行备份并将备份文件置于版本控制之下,而不是将数据库置于版本控制之下。说实话,我觉得这真的很难接受。

肯定有更好的办法。

更新:

好吧,没有更好的方法了,但我还是不太相信,所以我要稍微改变一下问题:

我想将整个数据库置于版本控制之下,我可以使用什么数据库引擎来将实际数据库置于版本控制之下,而不是转储?

sqlite是git友好的吗?

因为这只是开发环境,所以我可以选择任何我想要的数据库。

Edit2:

我真正想要的不是跟踪我的开发历史,而是能够从我的“新的根本性变化”分支切换到“当前稳定的分支”,并且能够用当前稳定的分支修复一些错误/问题等。这样,当我切换分支时,数据库就会自动地与我当前所在的分支兼容。 我不太关心实际数据。


当前回答

我就是这么做的:

因为你可以自由选择DB类型,使用一个基于文件的DB,如火鸟。

创建一个模板DB,它具有适合您实际分支的模式,并将其存储在存储库中。

当以编程方式执行应用程序时,创建模板DB的副本,将其存储在其他地方并使用该副本。

通过这种方式,您可以在没有数据的情况下将DB模式置于版本控制之下。如果你改变模式,你只需要改变模板DB

其他回答

有一个伟大的项目叫做“教义下的移民”,就是为了这个目的而建立的。

它仍然处于alpha状态,是为php构建的。

http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/index.html

使用像iBatis Migrations这样的工具(手动,短教程视频),它允许您在项目的整个生命周期中对数据库所做的更改进行版本控制,而不是数据库本身。

这允许您有选择地将单个更改应用到不同的环境中,记录哪些更改在哪些环境中,创建脚本以应用从a到N的更改、回滚更改等等。

我想把整个数据库置于版本控制之下 我可以使用数据库引擎,这样我就可以把实际的数据库 版本控制而不是它的转储?

这与数据库引擎无关。在Microsoft SQL Server上有很多版本控制程序。我不认为git可以解决这个问题,你必须使用pgsql特定的模式版本控制系统。我不知道这样的事情是否存在……

在git版本控制下存储每个级别的数据库更改就像每次提交时推送整个数据库,每次拉取时恢复整个数据库。 如果您的数据库很容易发生重大更改,并且您无法承担丢失它们的代价,那么您可以更新pre_commit和post_merge钩子。 我对我的一个项目也做了同样的事情,你可以在这里找到方向。

我想做一些类似的事情,将我的数据库更改添加到我的版本控制系统。

我将遵循Vladimir Khorikov“数据库版本控制最佳实践”这篇文章中的想法。总之,我将

在源代码控制系统中存储它的模式和引用数据。 对于每一个修改,我们将创建一个单独的SQL脚本

万一有用的话!