从 Git 到区块链

简介:

这是「区块链技术指北」的第 24 篇文章。

如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时简单介绍下自己,并注明来自「区块链技术指北」。同时我会把你拉入微信群「区块链技术指北」。BTW,李笑来老师也加入了我的知识星球,文末有加入方式。

GitHub 网站在程序员心目中的地位不言而喻,这个基于 Git 的托管网站可以说是开源的风向标。 我们 GitHub 中的 Git repo 中还可以找到 2005 年 4 月 8 日 Linus Torvalds 提交的 第一版 代码。

正是 GitHub 网站在全球的成功运营,加密数字货币开源项目才会以爆发性的增长。这个世界上最顶尖的程序员都在为这些开源项目提交 PR,这种社区式连接的力量,是无法衡量的。我们可以在 GitHub 上看到 Bitcoin、Ethereum、EOS 等项目的最新更新状态,每天都有无数的程序员为这些项目添砖加瓦。加密数字货币的共识,很大一部分来自 GitHub 社区。

那 Git 究竟是什么呢?简单讲就是一个 分布式版本控制软件。如果用三句话阐述什么是 Git 运行原理,那就是:[1]

  • 生成修改过的文件
  • 生成当前目录 tree 文件,关联当前状态文件
  • 生成 commit 文件,关联到当前目录 tree 文件,并记下父 commit

我们来试着理解这句话。当我们在 GitHub 创建一个新项目再 git clone 到本地(当然也可以本地 git init 初始化项目),把本地的代码放到这个目录,然后我们要怎么样提交到 GitHub 呢?我们在配置相应的 SSH 公钥之后,会执行如下的几个步骤来提交到 GitHub:

  • git add -A .
  • git commit -m "[Blockchain] ..."
  • git push origin master

简单讲就是,先本地提交,累积几次后再一次 push 到 remote。本次提交会关联到上一次提交,这跟区块链的 chain 是不是有些类似?比如本次提交的标志为 ab88b43,上一次提交的标志为 297f29a,那么本次提交的信息里就会有 parent commit 297f29a。这种类似链条的记录,是不是变得可追溯了啊?版本控制最重要的是什么,就是可追溯,如果某次错误提交,还可以回腿到历史版本。同样,可追溯也是区块链的重要特性。

再者,区块链的特性是分布式的,而 Git 天然就是分布式的,不过 Git 是依赖文件系统。GitHub 助力全球化协作,并且代码或者文档一旦提交到 GitHub,这个操作将是无法撤销的。GitHub 本身会将其网站上的 repo 利用分布式存储做好容灾;如果某程序员 clone 该 repo,只要它不删除,将会永久存储在自身的电脑,除非自身电脑文件系统崩溃;如果某程序员 fork 该 repo,只要它的账户不被删除,这个 repo 将永久保留在它的账户之下;另外,某个 repo fork、clone 次数越多,被摧毁的概率也就越低;再者,某个 repo 即使最近一次操作清空了所有的代码,还可以通过 git log 恢复。这样一分析,科学上网的 GitHub repo 将是 野火烧不尽,春风吹又生。

我的 博客 所有文章都存放在 GitHub,读者觉得我的文章还会被删吗?最近一天世界的一篇关于微信的文章很有趣,不妨 看看。

另外,区块链的另一个特性是不可篡改,也就是只能 INSERT。Git 呢?GitHub 托管的 repo 里的内容本身是可以修改的,然而这个 commit 历史却是无法修改的。每一次 commit 都有唯一标志,本次 commit 会有 parent commit 的信息。Git 产生的 log 也可以通区块链数据库进行类比。

也就是说,Git 是简化的 blockchain,用 Git 来理解区块链,这个事情是不是特别有趣?

参考

  • [1] douban.com (2013-07-18). 三句话的 git internal. Retrieved from https://www.douban.com/note/289253352.



原文发布时间为:2018-02-06
本文作者:区块链技术指北
本文来源:腾讯云 云+社区,如需转载请联系原作者。

目录
相关文章
|
安全 区块链 开发工具
区块链与Git版本工具的比较
区块链与Git版本工具的比较 来源:http://www.jianshu.com/p/b96b98983df6 作者: 梁波林  相同点: 1. 分布式存储方案 2. 链式数据 3. 去中心化 4.
1043 0
|
6天前
|
缓存 数据可视化 网络安全
Git命令大全
Git命令大全
37 1
|
10天前
|
开发工具 git
Git教程:深入了解删除分支的命令
【4月更文挑战第3天】
36 0
Git教程:深入了解删除分支的命令
|
28天前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux git命令使用教程
【Shell 命令集合 文件管理】Linux git命令使用教程
33 0
|
28天前
|
开发工具 git
git常用命令整理
git常用命令整理
13 0
|
16天前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
16 0
|
3月前
|
测试技术 持续交付 开发工具
1.Git使用技巧-常用命令3
1.Git使用技巧-常用命令3
34 0
|
3月前
|
缓存 开发工具 git
1.Git使用技巧-常用命令2
1.Git使用技巧-常用命令2
39 0
|
23天前
|
算法 开发工具 git
【git 实用指南】git 增加 本地代码 git add 相关命令和复杂情况需求
【git 实用指南】git 增加 本地代码 git add 相关命令和复杂情况需求
90 0
|
27天前
|
Shell Linux 开发工具
【Shell 命令集合 系统管理 】Linux 查看当前Git仓库的提交历史 gitps命令 使用指南
【Shell 命令集合 系统管理 】Linux 查看当前Git仓库的提交历史 gitps命令 使用指南
14 0

相关实验场景

更多