Git
Git 是一个开源的分布式版本控制系统,可以敏捷高效地管理代码,让项目代码支持同时存在多个不同的版本和分支,是程序员在项目开发种的必备工具。
除了代码文件可以进行版本控制之外,数据其实也可以版本控制!
介绍一个开源项目 —— Dolt,是一个 SQL 数据库,可以像 git 存储库一样进行分叉,克隆,分支,合并,推入和拉入。
像连接任何 MySQL 数据库一样,连接到 Dolt 即可运行查询或使用 SQL 命令更新数据。使用命令行界面导入 CSV 文件,提交更改,将其推送到远程或合并队友的更改。
对 Git 知道的所有命令对于 Dolt 都完全相同。

1、安装 Dolt

在 Linux 或 Mac 上

  1. sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'

使用 Homebrew 安装:

  1. brew install dolt

Windows 安装下载 msi 文件直接运行即可

下载 msi 地址:https://github.com/dolthub/dolt/releases
确保已安装 Go,并且go路径正确。克隆此存储库,然后将 cd 插入go目录。然后运行:

  1. go install ./cmd/dolt

2、配置

通过 dolt 在终端中运行,验证安装是否成功。

  1. dolt
  2. Valid commands for dolt are
  3. [...]

dolt 使用用户名和电子邮件进行配置,创建提交将需要它们。这些命令与 git 完全相同。

  1. dolt config --global --add user.email YOU@DOMAIN.COM
  2. dolt config --global --add user.name "YOUR NAME"

3、入门

创建第一个仓库,存储州人口数据。

  1. mkdir state-pops
  2. cd state-pops

dolt init像设置git一样,运行以设置一个新的仓库。然后运行一些SQL查询以插入数据。

  1. $ dolt init
  2. Successfully initialized dolt data repository.
  3. $ dolt sql -q "create table state_populations ( state varchar(14), population int, primary key (state) )"
  4. $ dolt sql -q "show tables"
  5. +-------------------+
  6. | tables |
  7. +-------------------+
  8. | state_populations |
  9. +-------------------+
  10. $ dolt sql -q "insert into state_populations (state, population) values
  11. ('Delaware', 59096),
  12. ('Maryland', 319728),
  13. ('Tennessee', 35691),
  14. ('Virginia', 691937),
  15. ('Connecticut', 237946),
  16. ('Massachusetts', 378787),
  17. ('South Carolina', 249073),
  18. ('New Hampshire', 141885),
  19. ('Vermont', 85425),
  20. ('Georgia', 82548),
  21. ('Pennsylvania', 434373),
  22. ('Kentucky', 73677),
  23. ('New York', 340120),
  24. ('New Jersey', 184139),
  25. ('North Carolina', 393751),
  26. ('Maine', 96540),
  27. ('Rhode Island', 68825)"
  28. Query OK, 17 rows affected

使用dolt sql跳进一个 SQL 壳,或运行跟单的查询-q选项。

  1. $ dolt sql -q "select * from state_populations where state = 'New York'"
  2. +----------+------------+
  3. | state | population |
  4. +----------+------------+
  5. | New York | 340120 |
  6. +----------+------------+

add新表和commit它们。每个命令都git完全匹配,但是使用表而不是文件。

  1. $ dolt add .
  2. $ dolt commit -m "initial data"
  3. $ dolt status
  4. On branch master
  5. nothing to commit, working tree clean

这次使用Shell使用更多SQL命令更新表:

  1. $ dolt sql
  2. # Welcome to the DoltSQL shell.
  3. # Statements must be terminated with ';'.
  4. # "exit" or "quit" (or Ctrl-D) to exit.
  5. state_pops> update state_populations set population = 0 where state like 'New%';
  6. Query OK, 3 rows affected
  7. Rows matched: 3 Changed: 3 Warnings: 0
  8. state_pops> exit
  9. Bye

查看对dolt diff以下内容所做的更改:

  1. $ dolt diff
  2. diff --dolt a/state_populations b/state_populations
  3. --- a/state_populations @ qqr3vd0ea6264oddfk4nmte66cajlhfl
  4. +++ b/state_populations @ 17cinjh5jpimilefd57b4ifeetjcbvn2
  5. +-----+---------------+------------+
  6. | | state | population |
  7. +-----+---------------+------------+
  8. | < | New Hampshire | 141885 |
  9. | > | New Hampshire | 0 |
  10. | < | New Jersey | 184139 |
  11. | > | New Jersey | 0 |
  12. | < | New York | 340120 |
  13. | > | New York | 0 |
  14. +-----+---------------+------------+

然后使用dolt add和再次提交更改dolt commit

  1. dolt add state_populations
  2. dolt commit -m "More like Old Jersey"

使用来查看存储库的历史记录dolt log

  1. % dolt log
  2. commit babgn65p1r5n36ao4gfdj99811qauo8j
  3. Author: Zach Musgrave <zach@dolthub.com>
  4. Date: Wed Nov 11 13:42:27 -0800 2020
  5. More like Old Jersey
  6. commit 9hgk7jb7hlkvvkbornpldcopqh2gn6jo
  7. Author: Zach Musgrave <zach@dolthub.com>
  8. Date: Wed Nov 11 13:40:53 -0800 2020
  9. initial data
  10. commit 8o8ldh58pjovn8uvqvdq2olf7dm63dj9
  11. Author: Zach Musgrave <zach@dolthub.com>
  12. Date: Wed Nov 11 13:36:24 -0800 2020
  13. Initialize data repository

4、汇入资料

如果数据包含在CSV或JSON之类的平面文件中,则可以使用以下dolt table import命令将其导入。使用dolt table import -u将数据添加到现有的表,或dolt table import -c创建一个新的。

  1. $ head -n3 data.csv
  2. state,population
  3. Delaware,59096
  4. Maryland,319728
  5. $ dolt table import -c -pk=state state_populations data.csv

5、分支并合并

与 git 一样,最好在自己的分支上进行更改,然后将其合并回master。该dolt checkout命令的工作原理与git checkout完全相同。

  1. $ dolt checkout -b <branch>

merge命令的工作原理也相同。

  1. $ dolt merge <branch>

6、使用克隆、推送

Dolt像git一样支持遥控器。当从其中一个克隆数据时,将自动设置遥控器。

  1. $ dolt clone dolthub/corona-virus
  2. ...
  3. $ cd corona-virus
  4. $ dolt remote -v
  5. origin https://doltremoteapi.dolthub.com/dolthub/corona-virus

要推送到远程,需要凭据。运行dolt login以打开浏览器以登录并缓存本地凭据。可以使用Google 帐户,Github 帐户或用户名和密码登录 DoltHub。

  1. $ dolt login

如果有一个本地创建的存储库,现在想将其推送到一个远程服务器上,则完全可以像使用 git 一样添加一个远程服务器。

  1. $ dolt remote add origin myname/myRepo
  2. $ dolt remote -v
  3. origin https://doltremoteapi.dolthub.com/myname/myRepo

然后推到它。

  1. $ dolt push origin master

还有其他功能可以在官方仓库查看。

7、Github 开源地址

https://github.com/dolthub/dolt