2013-09-21 17 views
4

我在Heroku上有一個php應用程序,用戶數據存儲在sqlite中。每當我更新我的PHP文件並將其推送到Heroku時,本地sqlite文件也會更新...這意味着我失去了工作數據並獲取了啓動數據。用git push保存.sqlite

在.gitignore中包含該文件可確保該文件不可用於Heroku應用程序。它只是從遠程git倉庫中刪除該文件。

git update-index --assume-unchanged無法標記sqlite文件。它給了我一個錯誤,說「無法標記文件」。

需要幫助一次創建sqlite文件,然後根本不更新/刪除。感謝您的建議。

回答

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

在這裏看到: Applying .gitignore to committed files

+0

也不管用。在刪除文件的緩存副本後,當我執行git push時,Remove操作應用於遠程git,並從存儲庫中刪除sqlite文件。 –

+0

這裏是一個步驟中通過命令的步驟(的.gitignore已經有條目myDb.sqlite) > git的RM --cached myDB.sqlite RM 'myDB.sqlite' > GIT中添加myfile.php > git的承諾-m「更新」 [主eb7edf3]更新 2檔改變,1個插入(+) 刪除模式100644 myDB.sqlite SQLite的文件被標記爲刪除,則刪除所述推送命令之後。 –

+0

嘿朋友:你不應該使用'rm'myDB.sqlite',這個命令是從git repo –

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(這將在源代碼管理下),稍後執行它會將缺失的對象添加到數據庫中。

+0

@mvp ....也試過這個選項....我的表格第一次創建時...但隨着任何PHP文件的下一步,我的數據庫也被刪除,我不得不從一個新的數據庫/表創建開始。我的.sqlite文件不在git下,但由於某種原因...因爲它不在本地,所以它也從git倉庫中刪除(即使我只是使用git add 而不是git add。 –

+0

@ PallaviSingh:我的答案假設你從git:'git rm database.db'中刪除* database.db',並且將'database.sql'添加到git中,然後每次運行腳本'database.sql' - 這個將會重新創建它或者必要時進行更新,因爲database.db不會被git控制,所以它不會被覆蓋,因此值得將它(* .db)添加到'.gitignore'。 – mvp

+0

@mvp ..你的假設是正確的,如果我正在使用靜態DB,那麼它就會工作......在這種情況下,重新創建表格可能會奏效,但我的數據庫預計會有類似用戶的分數。我的本地數據的副本,所以我不能在每次推後重新創建表。我希望一旦數據庫創建(使用你的建議是執行一個腳本文件,而不是從本地上傳數據庫)我的push命令都沒有觸及這個文件。不幸的是, - 海斯 - 不變也不起作用。 –

0

好吧....似乎我已經完成了它。我應該有.gitignore條目或--assume - 不變。兩者在一起如何搞砸所有設置。 當前刪除.gitignore項,並已設置sqlite文件被標記爲未更改,直到另行通知,使用 git update-index --assume-不變myDB.sqlite 這對我來說是伎倆。 @rkp & @mvp ...感謝您的幫助......如果我過於熱心,沒有任何幫助是好事! :)