我在Heroku上托管一个网站,并使用SQLite数据库。在Git中处理数据库的正确方法是什么?
问题是我希望能够从存储库中获取数据库(主要用于备份),但每当我提交&将更改推送到存储库时,都不应该更改数据库。这是因为我的本地计算机上的数据库可能会有完全不同的(和不相关的)数据;这是一个测试数据库。
这是什么最好的方法呢?我曾尝试将我的数据库添加到.gitignore
文件中,但这会导致数据库完全未版本化,从而无法在需要时将其拉出。
我在Heroku上托管一个网站,并使用SQLite数据库。在Git中处理数据库的正确方法是什么?
问题是我希望能够从存储库中获取数据库(主要用于备份),但每当我提交&将更改推送到存储库时,都不应该更改数据库。这是因为我的本地计算机上的数据库可能会有完全不同的(和不相关的)数据;这是一个测试数据库。
这是什么最好的方法呢?我曾尝试将我的数据库添加到.gitignore
文件中,但这会导致数据库完全未版本化,从而无法在需要时将其拉出。
尽管git(就像大多数其他版本控制系统一样)支持跟踪数据库等二进制文件,但它只对文本文件起作用。换句话说,你永远不应该使用版本控制系统来跟踪不断变化的二进制数据库文件(除非它们被创建一次,几乎不会改变)。
在git中仍然追踪数据库的一种常用方法是跟踪文本数据库转储。例如,可以使用sqlite3
实用程序(子命令.dump
)将SQLite数据库转储到* .sql文件中。但是,即使在使用转储时,也只适用于跟踪不经常更改的模板数据库,并使用脚本作为标准部署的一部分从这些转储创建二进制数据库。
,你可以一个pre-commit
钩添加到您的本地资源库,这将unstage你不想将任何文件。
例如下面的代码工作(可能修改你的数据库),当添加到.git/hooks/pre-commit
git reset ./file/to/database.db
你会在某个时候结束:
$ git status --porcelain
M file/to/database.db
M src/foo.cc
$ git add .
$ git commit -m "fixing BUG in foo.cc"
M file/to/database.db
.
[master 12345] fixing BUG in foo.cc
1 file changed, 1 deletion(-)
$ git status --porcelain
M file/to/database.db
这样你就可以永远不小心投入您database.db
它是您对版本控制感兴趣的数据库架构吗?但是确保你不在其中版本的数据?
我从混帐排除您的数据库(使用.gitignore file)。
如果你使用那么你的模式在你的代码已经跟踪的ORM和迁移(如活动记录),并可以重新创建。
但是如果你没有,那么你可能想利用你的数据库的副本,然后保存了创建报表和版本他们。
Heroku不推荐在生产环境中使用SQLite,而是使用他们的Postgres系统。这可以让你对远程数据库执行很多任务。
如果你想拉从Heroku的实时数据库的Postgres备份的指令可能会有所帮助。
据我所知,Heroku的访问你的应用程序的数据唯一的办法就是用git。或者是?你的回答让我觉得应该有其他选择。 –