2012-11-07 158 views
3

我在Git存儲庫中有一個Sqlite數據庫。今天我想在兩個不同的提交中對視圖進行區分。我就是這麼做的:diff sqlite表的Git鉤子

$ sqlite3 -list file.sqlite "SELECT * FROM contact_list_detailed" >/tmp/newlist 
$ git checkout 51c24d13c file.sqlite 
$ sqlite3 -list file.sqlite "SELECT * FROM contact_list_detailed" >/tmp/oldlist 
$ git checkout -- file.sqlite 
$ diff /tmp/oldlist /tmp/newlist 

它的工作原理和我可以腳本,如果我想要的。但有沒有什麼「好」的方法來做到這一點鉤?

回答

4

您將使用HEADHEAD^來訪問以前和當前的修訂;一個例子見git post-commit hook - script on committed files

使用將文件提取到臨時目錄而不覆蓋工作副本。


我不會將二進制文件存儲在git除非絕對必要。 如果您創建一個sqlite3 file.sqlite .dump的SQL命令文本文件並將放入git,並且只將二進制數據庫作爲生成的文件,那麼您可以避免很多麻煩。 (但你要關心在必要時重新生成SQL文件)。

+0

可以將我的db文件放到.gitignore文件中,然後使用預提交鉤子來轉儲內容並將其添加到我的git repo中的文件中?然後我使用某種預拉鉤從這個傾銷內容創建sqlite二進制文件? –

+1

是的(但我想你想'後結賬')。 –

+0

你說的話真的很有道理,我想這確實是做事的正確方式。我現在沒有時間真正實現這一點。但我標記你接受的答案。 –

10

Here是如何使用Git的textconv功能用於顯示的SQLite文件的版本的差異。它只是做一個轉儲,所以它可能不是超大型數據庫的高效率。沒有必要的鉤子。

該鏈接似乎不再可用,所以我使用的是存檔版本。在你的混帳配置文件(~/.gitconfig.git/config

*.sqlite3 diff=sqlite3 

然後:

它的要點是,在Git屬性文件(.gitattributes,或.git/info/attributes),添加一個模式匹配給力sqlite3的來進行比較:

[diff "sqlite3"] 
    binary = true 
    textconv = "echo .dump | sqlite3" 

如果你只是想跟蹤架構更改,使用.schema代替.dump

+0

我想這只是一個很好的做法,無論如何都將它保存爲文本格式。但這是一個不錯的解決方案。 +1 –

+0

如果您只是對模式更改感興趣,而不是數據更改,則可以在該腳本中將'.dump'更改爲'.schema'。 –