Git的内部数据结构是一个数据对象树,其中每个对象只指向其前身。每个数据块都经过哈希处理。当保存的哈希与实际哈希偏离时,将注意到修改(位错误或攻击)中间块。
这个概念与区块链有何不同?
Git未列为块链的示例,但至少在摘要中,两种数据结构描述看起来都相似:数据块,单向反向链接,哈希,......)。
那么差异在哪里,Git不被称为区块链?
答案 0 :(得分:100)
Git和区块链看起来相似的原因是因为它们都使用merkle trees作为底层数据结构。 merkle树是一棵树,其中每个节点都标有其内容的加密哈希值,其中包含其子项的标签。
Git的有向非循环图就是这样一个merkle树,其中每个节点(标记,提交,树或blob对象)都标有其内容的散列和其“子”的标签。请注意,对于提交,“子”术语与Git对父母的理解有点冲突:父提交是提交的子项,您只需要将图形视为一个不断增长的树。 - 根据它。
区块链与此非常相似,因为它们也在不断增长,并且它们也使用其merkle树属性来确保数据的完整性。但通常情况下,区块链被理解为不仅仅是merkle树,而是它们与“stupid content tracker” Git分开的地方。例如,区块链通常也意味着在块级别上具有高度分散的系统(并非所有区块都需要在同一位置)。
理解区块链有点困难(个人而言,我还远远不能理解它的一切),但我认为理解Git内部结构是理解merkle树的一种好方法,这肯定有助于理解区块链的基本部分。 / p>
答案 1 :(得分:36)
git
不是区块链技术的一个例子,原因有几个(这是第一个想到的):
在区块链实现中,每个块在添加到区块链之前都会多次独立验证。这确实是区块链技术最重要的事情之一,也是确保其不可攻击性的原因之一。"另一方面,许多git
项目不需要独立验证,当它们执行时,它们只需要一个人在将更改提交到存储库之前签署。因此,最多只有一点验证,你必须信任,git
打破了区块链技术的核心原则之一。
git
存储库不一定在许多服务器上重复。您可以在本地git
存储库中工作,如果您的本地磁盘已损坏,您将丢失所有内容。区块链技术意味着跨服务器复制分类帐。
您可以重写git
历史记录。将git push <remote> <branch> --force
设置为先前状态而不是<branch>
的{{1}}将重写历史记录。在区块链中,分类帐是一个不可变的历史记录。
答案 2 :(得分:19)
像比特币这样的网络货币,使用分布式共识加密链块(merkle树)。常见用法已将此缩短为&#39;区块链&#39;
虽然git使用了一系列块(merkle tree),但它缺乏分布式共识密码组件,这些组件常用于术语“BlockChain”。暗示。
答案 3 :(得分:19)
问题如下:为什么 Git 不被视为“区块链”? 因此,这是断言存在广泛的意见,即 Git 不是区块链(该断言被说明和本页上我前面的答案证实了这一点)并询问这种观点普遍存在的原因。这是个好问题。
从字面上看这个问题,答案可能是区块链术语和概念作为称为“比特币”的数字货币操作的一部分而变得流行,因此与比特币的做事方式相关联:这是通过大量使用计算特定散列的计算能力,包括随机数以满足某些任意要求,据称没有中央权威,这是“独立”的,甚至是“民主的”,其余的库尔援助;由于这些东西在 Git 中看不到,所以 Git 不可能是区块链,对吧?所以这个问题会从字面上得到回答。
隐藏在这个表面问题背后的是另一个问题:什么是区块链?现在你可以在某个地方查找定义并将其复制到这里,但我没有这样做,因为我决定多年前,在听播客时关于努力解释区块链新概念的比特币,区块链像 Git 一样工作,我不打算让我的宝贵理解被互联网上的随机声明误导。
那么什么是区块链?这个词是什么?
术语“区块链”中的任何内容都没有预先假定要求在内容中包含一个随机数,以便得出由许多前导零组成的散列。 (这个要求只是为了能够通过计算能力控制区块链,最终通过金钱。)
“区块链”一词中没有任何内容以网络的存在为前提,更不用说去中心化的网络了。
“区块链”一词中没有任何内容以任何“独立于”“中央权威”为前提。
术语“区块链”仅以链接在一起的(数据)块为前提。现在什么是链?它只是一个链接吗?不,它是一个强链接,旨在通过武力将事物联系在一起。
一个简单的链表不符合区块链的要求,因为列表中数据块的内容可能会被更改,而列表将继续来回链接就好了。这不是链条的运作方式。
要将数据块的链接变成数据块的链,需要以某种方式对块的内容进行校验和(消化)并且此校验和(摘要)必须是链接的一部分,使其成为保护内容的强链接,防止其被更改。这是一个区块链。
这就是 Git 所做的,因此 Git 是一个区块链,或者如果您愿意,可以作为一个区块链工作。
为了结束这个圈子,让我们再问一次:为什么 Git 不被认为是“区块链”? 这可能是因为很多人,甚至可能是绝大多数人,没有关注其本质一个概念,但闪烁accidents。
答案 4 :(得分:14)
与加密货币区块链不同; git没有p2p无信任共识机制。
答案 5 :(得分:10)
Blockchain
不只是任何块的任何链。
Blockchain
当有一种方法可以在两个或多个被转移时确定主链,并且当该决定不需要中央权限时。
答案 6 :(得分:1)
尽管区块链和git都使用merkle树作为数据结构,但目标却不同。
blockchain
通常由对等网络管理,该对等网络遵守用于节点间通信和验证新块的协议。记录后,任何给定区块中的数据都不能追溯更改,而无需更改所有后续区块,这需要网络多数同意。
根据比特币白皮书:
纯对等版本的电子现金将允许在线 付款直接从一方直接发送给另一方 通过金融机构。数字签名提供了一部分 解决方案,但如果信任的第三方失去了主要利益 仍然需要防止重复支出。我们提出了一个解决方案 使用对等网络的双花问题。网络 通过将交易散列为持续的 基于哈希的工作量证明,形成了无法更改的记录 而无需重做工作量证明。最长的链条不仅可以服务 作为见证事件序列的证据,但证明它来了 来自最大的CPU能力池。只要多数CPU电源 由不合作攻击网络的节点控制, 他们将产生最长的链并超过攻击者。网络 本身需要的结构很少。消息以最佳方式广播 努力的基础,节点可以随意离开并重新加入网络, 接受最长的工作量证明链作为发生情况的证明 他们走了
尽管Git
是一个分布式版本控制系统,用于在软件开发过程中跟踪源代码的更改。它旨在协调程序员之间的工作,但可以用来跟踪任何文件集的更改。其目标包括速度,数据完整性以及对分布式非线性工作流的支持。
根据Linus Torvalds的说法:
在许多方面,您都可以将git视为文件系统–它是 内容可寻址的,并且具有版本控制的概念,但是我真的 从文件系统的角度设计了解决问题的方法 人(嘿,内核是我的工作),而我实际上拥有 创建传统SCM系统的兴趣为零。
答案 7 :(得分:1)
没有理由不将Git视为区块链。 Git专注于一组非常特殊(也很重要)的资产:源代码。在这种情况下,共识是手动的,我们可以考虑将一个事务(提交)合并到发布分支中后被接受。 实际上,考虑到交易(提交)的数量,Git是迄今为止最成功的区块链。
摘自:https://arxiv.org/pdf/1803.00892.pdf “ ... ...我们定义了“区块链”和“区块链网络”,然后讨论了两种非常不同的,众所周知的区块链网络类别:加密货币和Git存储库...”
另请参阅下一篇论文,这些论文解释了Google为什么将单个monorepo用作真实的唯一来源(基本上是作为区块链)。 https://research.google/pubs/pub45424/
答案 8 :(得分:0)
Git和Blockchain看起来很相似,因为它们都使用Merkle Trees来存储带时间戳的有序交易。 merkle树是一种树形数据结构,其中每个节点都标记有密码哈希值它们的内容,包括其子项的标签。
第一个区别是散列函数:区块链具有非常昂贵的散列函数,因此必须开采每个块,并可以通过简单的提交消息来创建Git“块”。 / p>
比特币的目的是在交易顺序中增加信任。重点是最长的链,因为这是最昂贵的计算,因此很可能是事实。 >
Bitcoin通过要求哈希满足某些参数(以0的特定数量开头),通过增加消息中的值(“ nonce”)直到找到令人满意的哈希来实现此目的。这需要努力才能找到,但是只有1个计算可以验证现时。如果多个随机数产生令人满意的哈希值,则该哈希值将变小并作为事实。其他身份验证方案通过将哈希的发布集中到某个机构(可能是通过网络协议或其他方法进行投票)来使哈希值得信赖。
区块链数据仅限于交易,交易必须符合验证条件。交易必须有效才能包含在下一个区块中。 比特币交易与现实世界中的一项重要交易相对应,它证明了使用昂贵的区块记录这一转移的合理性,例如货币价值的交换。我们实际上并不在乎最终账本,这是对现实世界中的某些东西。
相比之下,Git块是任意的,因为提交可以包含任意数量的数据。价值在于组织到git树中的数据的变化,因为我们关心最终产品,并通过git存储库的存在对其进行了验证。
Git的目的是允许廉价的“分类帐”跟踪多种产品选择。 Git中的“分类帐”是我们关心的,它是我们的最终产品;交易数据仅记录产品的制造方式。我们希望使最终产品的多个版本的制造成本非常低廉,而其开销却足以要求创建者记录他们如何构建此产品。没有对数据进行任何明确的验证,如果最终产品看起来不错,则您可以对其进行维护,并且这种存在使得拥有该产品的创建链非常有用。如果最终产品不好或提交顺序无效,则在垃圾回收期间将删除此“分类帐”。
第二个区别是,区块链交易必须来自先前的有效来源。在Git中,我们不在乎您用于扩展树的数据。在区块链中,交易必须来自先前的有效来源。从这个意义上讲, Git跟踪我们环境的扩展,而Blockchain跟踪在封闭环境中的价值交换。
答案 9 :(得分:0)
数据结构是相似的,如果从字面上取名字,那么git repo就是“提交链”,如果您认为提交是一个块,那么它就是一个区块链。
所以这是一个很好的问题。但是这里的区别在于,当我们提到“区块链”时,我们不仅指的是字面意义上的区块链,而且还指的是PoW或PoS等共识算法,允许对等方同步验证区块。
Git确实具有相同的数据结构,但是没有以相同的方式分散。多个人可以获取git repo的整个历史记录的副本,但这并不是不值得信赖的,因为该源本身是集中的(GitHub,GitLab,GitBucked ...)。您不会从一个同伴那里抓到几个文件,而从另一个同伴那里抓到其他文件。您将从一个受信任的来源中提取所有文件。
您可以使用简单的链表实现一系列链。除非您围绕它开发整个去中心化网络以确保所写内容的合法性,否则它本身就不是“区块链”。
简而言之,git使存储分散化(以某种方式,但它与人们从任何服务器下载任何内容并没有什么不同),但它不会分散计算操作。这是您的不同之处,在git上,共识是通过PR和同行评审手动达成的,但是在区块链中,它是完全自动化的。