Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 什么';在Git中处理数据库的正确方法是什么?_Database_Git_Sqlite_Heroku_Version Control - Fatal编程技术网

Database 什么';在Git中处理数据库的正确方法是什么?

Database 什么';在Git中处理数据库的正确方法是什么?,database,git,sqlite,heroku,version-control,Database,Git,Sqlite,Heroku,Version Control,我在Heroku上托管了一个网站,并使用了一个SQLite数据库 问题是,我希望能够从存储库中提取数据库(主要用于备份),但无论何时我向存储库提交并推送更改,都不应更改数据库。这是因为我的本地计算机上的数据库中可能包含完全不同(且不相关)的数据;这是一个测试数据库 最好的办法是什么?我曾尝试将我的数据库添加到.gitignore文件中,但这会导致数据库完全取消版本设置,使我无法在需要时提取它。虽然git(就像大多数其他版本控制系统一样)支持跟踪数据库之类的二进制文件,但它只对文本文件最有效。换句

我在Heroku上托管了一个网站,并使用了一个SQLite数据库

问题是,我希望能够从存储库中提取数据库(主要用于备份),但无论何时我向存储库提交并推送更改,都不应更改数据库。这是因为我的本地计算机上的数据库中可能包含完全不同(且不相关)的数据;这是一个测试数据库

最好的办法是什么?我曾尝试将我的数据库添加到
.gitignore
文件中,但这会导致数据库完全取消版本设置,使我无法在需要时提取它。

虽然git(就像大多数其他版本控制系统一样)支持跟踪数据库之类的二进制文件,但它只对文本文件最有效。换句话说,您永远不应该使用版本控制系统来跟踪不断变化的二进制数据库文件(除非它们只创建一次,而且几乎永远不会改变)

在git中仍然跟踪数据库的一种流行方法是跟踪文本数据库转储。例如,可以使用
sqlite3
实用程序(子命令
.dump
)将SQLite数据库转储到*.sql文件中。但是,即使在使用转储时,也只适合跟踪不经常更改的模板数据库,并在标准部署中使用脚本从此类转储创建二进制数据库。

而git(就像大多数其他版本控制系统一样)支持跟踪数据库之类的二进制文件,它只适用于文本文件。换句话说,您永远不应该使用版本控制系统来跟踪不断变化的二进制数据库文件(除非它们只创建一次,而且几乎永远不会改变)


在git中仍然跟踪数据库的一种流行方法是跟踪文本数据库转储。例如,可以使用
sqlite3
实用程序(子命令
.dump
)将SQLite数据库转储到*.sql文件中。但是,即使在使用转储时,也只适合跟踪不经常更改的模板数据库,并使用脚本从此类转储中创建二进制数据库,作为标准部署的一部分。

您可以向本地存储库添加一个
预提交
钩子,该钩子将解除不希望推送的任何文件的转储

e、 g.将以下内容添加到
.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

因此,您永远不会意外地提交对
数据库.db所做的更改。您可以在本地存储库中添加一个
预提交
钩子,该钩子将取消保存您不想推送的任何文件

e、 g.将以下内容添加到
.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

因此,您永远不会意外地提交对
数据库所做的更改。db

您对版本控制感兴趣的是数据库的模式吗?但是要确保你没有对其中的数据进行版本化

我将从git中排除您的数据库(使用)

如果您正在使用ORM和迁移(例如活动记录),那么您的模式已经在代码中被跟踪,并且可以重新创建

但是,如果不是,则可能需要复制数据库,然后保存create语句并对其进行版本设置

Heroku不建议在生产中使用SQLite,而是使用他们的Postgres系统。这使您可以对远程数据库执行许多任务

如果您想从Heroku提取实时数据库,Postgres备份说明可能会有所帮助


您对版本控制感兴趣的是您的数据库模式吗?但是要确保你没有对其中的数据进行版本化

我将从git中排除您的数据库(使用)

如果您正在使用ORM和迁移(例如活动记录),那么您的模式已经在代码中被跟踪,并且可以重新创建

但是,如果不是,则可能需要复制数据库,然后保存create语句并对其进行版本设置

Heroku不建议在生产中使用SQLite,而是使用他们的Postgres系统。这使您可以对远程数据库执行许多任务

如果您想从Heroku提取实时数据库,Postgres备份说明可能会有所帮助


据我所知,Heroku访问应用程序数据的唯一方法是使用git。还是这样?你的回答让我觉得应该有其他选择。据我所知,Heroku访问应用程序数据的唯一方法是使用git。还是这样?你的回答让我觉得应该有其他选择。