Aan*_*ang 11 sql database sqlite version-control windows-7
任何人都可以建议一个好的方法(或工具)来控制SQLite数据库(仅限架构)吗?我正在尝试对SQLite数据库进行版本控制,我可以找到的唯一选项是使用GIT对版本控制整个文件,但此时我对数据不感兴趣,只是模式更改.
有什么建议?
谢谢 :-)
phy*_*att 12
我有两个答案.如果您的sqlite足够轻且不经常更新,您可以将其添加到存储库中而不会产生太多的影响/问题.
但是,由于存储为二进制文件,因此可读性会降低.
以下是如何让git很好地展示你的差异:
https://gist.github.com/peteristhegreat/a028bc3b588baaea09ff67f405af2909
git config diff.sqlite3.textconv 'sqlite3 $1 .dump'
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes
Run Code Online (Sandbox Code Playgroud)
现在,当您的sqlite db文件发生更改时,您可以看到更改git diff.
如果您只想查看模式的差异,只需更改.dump为.schema,它应该只进行创建调用并跳过插入.
如果您希望将db文件作为sql而不是作为db推送到存储库中,则可以使用git中的clean/smudge机制.
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion
https://github.com/gilesbowkett/git-smudge-and-clean
我还没有尝试过,但基本上每当你遇到一个db文件时,git就会使用sqlite3 $1 .schema导出提交文件的精简版本(作为sql命令).然后,当您从数据库中检出该文件时,它将使用转换回数据库cat $1 | sqlite3.
.gitattributes
mysqlite3.db merge=keepTheir
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
从 sqlite 文档中,您可以从 sqlite_master 隐藏表中提取架构信息。(https://www.sqlite.org/fileformat2.html#sqlite_master)
您可以将此内容保存在 GIT 中的文本文件中,这将为您提供一种跟踪架构更改的方法。