天天看點

從 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

本文作者:區塊鍊技術指北

本文來源:

騰訊雲 雲+社群

,如需轉載請聯系原作者。