我在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。或者是?你的回答讓我覺得應該有其他選擇。 –