任何人都可以建议一个好的方法(或工具)来控制sqlite数据库(仅限架构)吗?我正在尝试对sqlite数据库进行版本控制,我可以找到的唯一选项是使用GIT对版本控制整个文件,但此时我对数据不感兴趣,只是模式更改.
有什么建议?
谢谢 :-)
我有两个答案.如果您的sqlite足够轻且不经常更新,您可以将其添加到存储库中,而不会产生太多的影响/问题.
原文链接:https://www.f2er.com/sqlite/197681.html但是可读性因差异而存在,因为它存储为二进制文件.
sqlite3 git diff
以下是如何让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
现在,当您的sqlite db文件发生更改时,您可以通过git diff查看更改.
如果您只想查看模式的差异,只需将.dump更改为.schema,它只应执行create调用并跳过插入.
使用clean / smudge进入和退出存储库的sqlite3转换
如果您希望将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 export提交文件的精简版本(作为sql命令).然后当您从数据库中检出该文件时,它将使用cat $1 |转换回数据库sqlite3的.
Right way of tracking a sqlite3 binary file in git?
.gitattributes MysqLite3.db merge=keepTheir
希望有所帮助.