使用git push保留.sqlite

时间:2013-09-21 16:20:56

标签: git sqlite heroku

我在Heroku上有一个php应用程序,其中用户数据存储在sqlite中。每次我更新我的php文件并将其推送到Heroku时,本地sqlite文件也会更新...这意味着我丢失了工作数据并获取了启动数据。

包含.gitignore中的文件可确保Heroku应用程序无法使用此文件。它只是从远程git存储库中删除该文件。

git update-index --assume-unchanged无法标记sqlite文件。它给我一个错误,说“无法标记文件”。

需要帮助才能创建一次sqlite文件,然后根本不更新/删除。 Thanx的建议。

3 个答案:

答案 0 :(得分:1)

将文件掩码添加到.gitignore本身并没有做任何事情,当然也不会从远程存储库中删除文件(阅读更多here)。

通常,将SQLite数据库存储在源代码控制(包括git)下是非常糟糕的。对此的最佳解决方案是创建在必要时创建模板数据库的脚本。这个脚本可能如下所示:

  

database.sql:

BEGIN TRANSACTION; -- wrap everything into one transaction
-- create tables, always use NOT EXISTS:
CREATE TABLE IF NOT EXISTS items (
    item_id INTEGER AUTOINCREMENT PRIMARY KEY,
    item_name VARCHAR(32)
);
-- create indexes, always use NOT EXISTS:
CREATE INDEX IF NOT EXISTS items_item_name ON items (item_name);
-- add more CREATE TABLE and/or CREATE INDEX statements... 

COMMIT;

然后您可以使用以下命令执行此脚本:

sqlite3 -init database.sql database.db ""

如果您第一次执行它,如果它不存在,将创建database.db。如果你第二次执行它,什么都不会发生。但是,您可以稍后决定将更多索引或表添加到database.sql(将受源代码管理)中,稍后执行它会将缺少的对象添加到数据库中。

答案 1 :(得分:0)

Edit .gitignore to match the file you want to ignore
git rm --cached /path/to/file

见这里: Applying .gitignore to committed files

答案 2 :(得分:0)

好吧....好像我已经结束了。我应该有.gitignore条目或--assume-unchanged。两者在一起有些搞砸了所有设置。 目前已删除.gitignore条目,并已将sqlite文件设置为未更改,直至另行通知,使用 git update-index --assume-unchanged myDB.sqlite 这对我有用。 @rkp& @mvp ...感谢您的帮助......如果我过于热心,没有多少帮助是好的! :)