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

我该怎么做?有没有特定的文件夹可以保存在git存储库下?我怎么知道是哪一个?我怎么才能确定我放对了文件夹呢?

我需要确定,因为这些变化不是向后兼容的;我不能把事情搞砸.

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

编辑:

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

一定有更好的办法.

更新:

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

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

sqlite会对git友好吗?

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

编辑2:

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

推荐答案

取而代之的是数据库转储和版本控制.这样它就是一个纯文本文件.

我个人建议您同时保留数据转储和模式转储.通过使用diff,可以很容易地看到模式在不同版本之间发生了什么变化.

如果您要进行较大的更改,则应该有一个辅助数据库,您可以对其进行新的模式更改,并且不要接触旧的数据库,因为正如您所说的,您正在创建分支.

Database相关问答推荐

在MongoDB的树形 struct 中更新具有给定id的元素

在 ScyllaDB 中查询 100 亿行(高基数)的效率

数据库 struct 建议

生产中的超大型 Mnesia 表

术语 SSTable 和 LSM Tree 有什么区别

安装 SQL Server Management Studio Express后提示:Cannot open user default database. Login failed.

Symfony2:spl_object_hash() expects parameter 1 to be object, string given in Doctrine

Objective-C中是否有类似于LINQ的东西?

数据库中空值(nulls)使用的空间

是否应该强制执行参照完整性?

nvarchar (50) 与 nvarchar (max) 的含义

生成和读取条形码

MySQL 错误 - #1062 - Duplicate entry ' ' for key 2

维护 mgo 会话的最佳实践

Sqlite 判断表是否为空

如何在实体框架中使用字符串属性作为主键

如何对彼此接近的纬度/经度点进行分组?

SQL Server Express LocalDB 可以远程连接吗?

Spring data : CrudRepository 的保存方法和更新

将 NULL 插入 MySQL 时间戳