如何与Git(或àlaGit)

时间:2016-01-26 11:38:32

标签: mysql json database git sqlite

我们目前使用JSON文件来存储配置系统所需的数据。我们使用Git作为版本控制系统。

我们不时手动填充这些JSON:我们使用同时​​修改文本,例如,通过在数组中添加新元素并将更改提交给Git。另外,由于JSON是纯文本格式,因此在批准提交之前,Git可以让我们轻松地重新定义,创建或查看任何合并请求。

但是,我们实际上使用这些JSON作为所有配置的数据库。我们认为这不是最好的选择。例如,在这些JSON中定义的(结构中的元素)之间存在大量的完整性约束,这些约束不明显且不能以任何方式强制执行。可以想象,添加新元素时很容易忘记,违反或破坏。

例如,这些结构和它们之间的关系可以根据表,主键和外键轻松建模。出于这个原因,我们认为使用真正的关系数据库可能会获得一些优势,但我们强烈希望实现以下目标:

  1. 必须仍然可以自动生成JSON 数据库实例(配置系统)
  2. 我们希望将Git与数据库的并发使用以某种方式集成 - 或者理想发言,我们希望能够轻松创建实例分支,创建合并请求,让其他人审查差异分支之间的差异,最后批准它们。
  3. 您是否了解任何良好的策略或对上述要求有任何建议?是否有针对上述问题的特定工具(特别是问题2)?某些技术是否曾遇到过这类问题?我们非常感谢任何使整个开发流程更安全,更容易的建议。

1 个答案:

答案 0 :(得分:1)

只需将数据库存储为纯文本:

$ sqlite3 config.db .dump > config.db.sql
$ cat config.db.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE Users(name primary key);
INSERT INTO "Users" VALUES('me');
INSERT INTO "Users" VALUES('you');
INSERT INTO "Users" VALUES('somebody');
CREATE TABLE Config(name, value, user references Users(name));
INSERT INTO "Config" VALUES('EnableBugs',0,NULL);
INSERT INTO "Config" VALUES('EnableBugs',1,'you');
INSERT INTO "Config" VALUES('BackgroundColor','#000000','me');
INSERT INTO "Config" VALUES('BackgroundColor','#ffffff','somebody');
INSERT INTO "Config" VALUES('BackgroundColor','#808080','you');
COMMIT;