If you configure git like this:
git config filter.sqlite3.clean 'sqlite3 %f .dump'
git config filter.sqlite3.smudge 'sqlite3 %f'
echo '*.db filter=sqlite3' >> .git/info/attributes
and you have an sqlite3 database in a *.db
file:
sqlite3 chinook.db 'select * from Artist order by random() limit 3'
ArtistId Name
---------- -------------
82 Faith No More
106 Motörhead
3 Aerosmith
and you commit the database, before updating it with the following query:
sqlite3 chinook.db "update Artist set name = replace(name, 'P', '🅱') where name == 'Deep Purple'"```
then you can version control your database as if it was a plain text file, subject to a performance penalty which only affects the developer:
λ git diff
diff --git a/chinook.db b/chinook.db
index 866826b..ad14030 100644
--- a/chinook.db
+++ b/chinook.db
@@ -419,7 +419,7 @@ INSERT INTO Artist VALUES(54,'Green Day');
INSERT INTO Artist VALUES(55,'David Coverdale');
INSERT INTO Artist VALUES(56,'Gonzaguinha');
INSERT INTO Artist VALUES(57,'Os Mutantes');
-INSERT INTO Artist VALUES(58,'Deep Purple');
+INSERT INTO Artist VALUES(58,'Deep 🅱urple');
INSERT INTO Artist VALUES(59,'Santana');
INSERT INTO Artist VALUES(60,'Santana Feat. Dave Matthews');
INSERT INTO Artist VALUES(61,'Santana Feat. Everlast');