Git的内部数据结构是一个数据对象树,其中每个对象只指向它的前一个对象。每个数据块都是散列的。当保存的哈希值与实际哈希值偏离时,修改中间块(比特错误或攻击)将被注意到。
那么区别在哪里,Git不被称为区块链?
Git和区块链之所以看起来相似,是因为它们都使用merkle树作为底层数据结构。merkle树是一种树,其中每个节点都用其内容的加密散列值标记,其中包括其子节点的标签。
Git的有向无环图就是这样,一个merkle树,其中每个节点(标签、提交、树或blob对象)都用其内容的散列及其“子”的标签进行标记。注意,对于提交,“子”术语与Git对父的理解有点冲突:父提交是是提交的子,你只需要把这个图看作是一棵不断生长的树,通过重新根它。
区块链与此非常相似,因为它们也在以这种方式增长,并且它们也在使用其默克尔树属性来确保数据完整性。但通常情况下,区块链不仅仅被理解为默克尔树,这是它们与“愚蠢的内容跟踪器”Git分离的地方。例如,区块链通常还意味着在区块级别上拥有一个高度分散的系统(并非所有的区块都需要在同一个地方)。
理解区块链有点困难(就我个人而言,我还远远没有理解它的一切),但我认为理解Git内部是理解默克尔树的好方法,这肯定有助于理解区块链的基本部分。
不像cryptocurrency blockchains;Git没有p2p的无信任共识机制。
像比特币这样的网络货币,使用分布式共识加密区块链(默克尔树)。常用的缩写是'区块链'
虽然git使用区块链(默克尔树),但它缺乏术语“区块链”所暗示的分布式共识加密组件。
区块链是不,是任意块的任意链。
区块链是当当两条或两条以上的主链被转向时,有一种确定主链的方法时,并且当不需要中央机构来确定时。
区块链和git的目标是不同的,尽管它们都使用默克尔树作为数据结构。
blockchain通常由一个点对点网络管理,该网络遵循节点间通信和验证新块的协议。一旦记录,任何给定区块中的数据都不能在不改变所有后续区块的情况下进行追溯修改,这需要网络大多数人的共识。
blockchain
根据比特币白皮书:
纯点对点的电子现金将允许在线支付 付款直接从一方发送到另一方,而不经过 通过金融机构。数字签名提供部分 解决方案,但如果有可信的第三方,主要的好处就失去了 仍然需要防止重复支出。我们提出一个解决方案 使用点对点网络的双重花费问题。网络 通过将事务散列到一个正在进行的链来为它们标记时间 基于哈希的工作量证明,形成不可更改的记录 不需要重新做功证明。最长的链不仅是服务 作为事件发生顺序的证明,但证明了它的发生 来自最大的CPU能力池。只要是CPU的大部分功耗 由不合作攻击网络的节点控制, 他们会生成最长的链,并超过攻击者。网络 它本身需要最少的结构。信息通过一台best广播 基于努力,节点可以随意离开和重新加入网络, 接受最长的工作量证明链作为所发生事情的证明 当他们走了
而Git是一个分布式版本控制系统,用于跟踪软件开发过程中源代码的变化。它是为协调程序员之间的工作而设计的,但它也可以用于跟踪任何一组文件中的更改。它的目标包括速度、数据完整性和对分布式、非线性工作流的支持。
Git
根据Linus Torvalds的说法:
在很多方面,你可以把git看作一个文件系统 内容可寻址,它有版本控制的概念,但我真的 从文件系统的角度对问题进行了设计 人(嘿,我就是做玉米粒的),我实际上绝对有
戳说:
merkle树是一种树数据结构,其中每个节点都用其内容的加密哈希值标记,其中包括其子节点的标签。
第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,因此每个块都必须被挖掘,而Git“块”可以用一个简单的提交消息创建。
比特币的目的是为交易秩序增加信任。重点是最长的链,因为它是最昂贵的计算,因此最有可能是真理。
比特币通过要求哈希满足某些参数(以特定数量的0开始),通过在消息中增加一个值(“nonce”),直到找到一个满意的哈希来实现这一点。这需要努力去寻找,但只需要一次计算来验证;如果多个nonces产生一个令人满意的哈希值,那么其中一个将更低,并被视为真实值。其他身份验证方案通过将散列的发布集中到一个权威机构(可能通过网络协议或其他方法投票)来使散列可信。
区块链数据仅限于事务,必须符合验证。事务必须有效,才能包含在下一个块中。我们实际上并不关心最终的分类账,它是对现实世界中某些东西的一个隐喻。
相比之下,Git块是任意的,因为一次提交可以包含任意数量的数据。它的价值在于将数据组织到git树中的变化,因为我们关心最终产品,它由git存储库的存在进行验证。
Git中的“分类帐”是我们所关心的,它是我们的最终产品;事务数据只记录产品是如何构建的。我们想让制作多个最终产品版本的成本非常低,只需要创造者记录他们是如何制作这个产品的。没有对数据进行显式验证,如果最终产品看起来不错,您就可以维护它,并且它的存在使得拥有这个产品的创建链变得有用。如果最终产品是坏的或者提交的顺序无效,这个“分类账”将在垃圾收集期间被删除。
在Git中,我们不关心你使用什么数据来扩展树。在区块链中,事务必须来自先前的有效源。在这种意义上,Git跟踪我们环境的扩展,而区块链跟踪封闭环境中的价值交换。
摘录自:https://arxiv.org/pdf/1803.00892.pdf “……我们定义了“区块链”和“区块链网络”,然后讨论了两种非常不同的、众所周知的区块链网络:加密货币和Git存储库 参见下一篇文章,解释为什么谷歌使用一个单一的monorepo作为单一的真相来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/ < / p >
问题是:为什么Git不被认为是“区块链”?所以这是在断言有一个广泛流传的观点,Git不是一个区块链(这一观点在本页我之前的回答中得到了说明和证实),并询问这种观点流行的原因。这是个好问题。
的问题上,答案可能是区块链术语和概念流行起来的数字货币操作称为“比特币”,并因此被与多少比特币的事情:这是通过使用大量的计算能力来计算一个特定的散列包括现时标志符合特定的任意需求,据说没有中央权威,这就是“独立”,甚至是“民主”,和其他的库尔援助;因为这些东西在Git中是看不到的,Git不可能是区块链,对吧?所以这个问题的答案就是字面上的。
在这个表面的问题背后隐藏着另一个问题:什么是区块链?现在你可以在某个地方查找定义并将其复制到这里,但我没有这样做,因为几年前我有下定决心,当时我在听一个关于比特币的播客,它努力解释区块链的新概念,一个区块链工作类似于Git和我不打算让我宝贵的理解被互联网上的随机声明误导。
区块链是什么?这个词里有什么?
术语“区块链”中的任何内容都不要求在内容中包含一个nonce,以便得出一个由多少个前导零组成的哈希值。(这个要求只是为了能够通过计算能力,最终通过金钱来控制区块链。)
术语“区块链”中没有任何东西以网络的存在为前提,更不用说去中心化网络了。
“区块链”一词中的任何内容都不以“独立”于“中央权威”为前提。
术语“区块链”只是假设区块(数据)链接在一起。那么什么是链呢?它只是一个链接吗?不,它是一个强大的链接,旨在通过力量将东西连接在一起。
简单的链表不符合区块链的条件,因为列表中数据块的内容可以被更改,而列表将继续来回链接。链条不是这么运作的。
要将数据块的链接转换为数据块的链,块的内容需要以某种方式进行校验和(摘要),并且这个校验和(摘要)必须是链接的一部分,使其成为保护内容的强链接,防止其被更改。这是区块链。
这就是Git所做的,因此Git是区块链,如果你愿意,也可以将其视为区块链。
这可能是因为许多人,甚至是绝大多数人,并不关注一个概念的本质,而是在眨眼。
总结一下(对我来说):
虽然Git为您提供了完全的自由选择,但区块链是一个高度政治化的系统,在那里您被迫信任他人:
因此,如果你是一个人,Git和区块链之间没有区别。当您信任Git和您自己时,您已经拥有了预定义的共识。
但是,当你处于一个网络中时,事情就开始变得不同了。
注:
Git提供了多种可能的共识算法,你可以从中选择:
在报纸或类似的报纸上发布SHA(分发的,很难伪造的东西)
<;variant不提供加密安全的共识,但与比如Gerrit和Fast-Forward-Only push相结合,它是一些定义很好的共识算法。
因此,要使Git为区块链,你所需要的就是加入一些空气。
一些不同的观点:
Git本身没有区块链。相比之下,它远小于区块链(缺乏预定义的共识算法),而远高于区块链(允许从过多的共识算法中选择,意味着作为SCM等)。
其他一些观察结果:
Git分支与区块链拆分相同。虽然区块链拆分很少发生,但大多数Git存储库的分支(master+HEAD)都比比特币分裂少。
master
HEAD
非常个人的想法:
虽然区块链是一些言过其实的词汇,一些你可以快乐地生活没有,Git是一个不可避免的基本工具来完成你的工作,一个基本的必需品,你不能没有,像空气和水一样重要。这可能就是为什么像我这样的人不把Git称为区块链..
YMMV