为什么Git不被视为"区块链"?

Pae*_*els 150 git hash blockchain

Git的内部数据结构是一个数据对象树,其中每个对象只指向其前身.每个数据块都经过哈希处理.当保存的哈希与实际哈希偏离时,将注意到修改(位错误或攻击)中间块.

这个概念与区块链有何不同?
Git未列为块链的示例,但至少在摘要中,两种数据结构描述看起来都相似:数据块,单向反向链接,哈希,......).

那么差异在哪里,Git不被称为区块链?

pok*_*oke 110

Git和区块链看起来相似的原因是因为它们都使用merkle树作为其底层数据结构.merkle树是一棵树,其中每个节点都标有其内容的加密哈希值,其中包括其子项的标签.

Git的有向非循环图正好是一个merkle树,其中每个节点(标记,提交,树或blob对象)都标有其内容的散列和其"子"的标签.请注意,对于提交,"子"术语与Git对父母的理解有点冲突:父提交提交的子项,您只需要将图形视为通过重新生成它而不断增长的树.

区块链与此非常相似,因为它们也以这种方式不断增长,并且它们还使用其merkle树属性来确保数据完整性.但通常情况下,区块链被理解为不仅仅是merkle树,而是它们与"愚蠢的内容跟踪器"Git分离的地方.例如,区块链通常也意味着在块级别上具有高度分散的系统(并非所有块都需要在同一位置).

理解区块链有点困难(个人而言,我还远远不了解它的一切),但我认为理解Git内部结构是理解merkle树的一种好方法,这肯定有助于理解区块链的基本部分.

  • 对不起,但没有区块链带来的东西比git更多.区块链和git一样愚蠢.如果你不相信,你会被夸大.对等网络和共识系统是一个单独的东西. (21认同)
  • Git 是一个区块链。诸如要求“高度去中心化的系统”之类的反对意见是实施细节。 (12认同)
  • “*区块链通常也意味着拥有一个高度去中心化的系统,并且并非所有区块都需要位于同一个地方*”——Git 也是如此吗?您可以执行[浅层](https://git-scm.com/docs/shallow)或[部分克隆](https://git-scm.com/docs/partial-clone)。 (4认同)
  • 私人账本(区块链)在概念上与 git 相同 (3认同)
  • 那么,这个答案想说的是 Git 不是区块链,因为_区块链通常也意味着在区块级别上拥有一个高度去中心化的系统_。这个答案似乎没有描述为什么,除了这个许多人认为错误的“例子”。我缺少什么? (2认同)
  • 无论如何,Git 是一个高度分散的系统。不确定“在块级别”是什么意思。完整的比特币节点存储比特币区块链的完整副本,而 git 用户存储 Git 存储库的完整副本。这两种情况下的新块都可以来自任何地方。 (2认同)

hou*_*anb 43

git 区域链技术不是一个例子,原因有几个(这是第一个想到的):

  1. 在区块链实现中,每个块在被添加到区块链之前多次独立验证.这确实是区块链技术最重要的事情之一,也是确保其"不可攻击性"的原因之一.另一方面,许多git项目不需要独立验证,并且当它们执行时,它们仅需要一个人在将更改提交到存储库之前签署.因此,您必须信任至多一个验证点,这git打破了区块链技术的核心原则之一.

  2. 一个git仓库不一定复制在许多服务器上.您可以git在本地从存储库工作,如果您的本地磁盘已损坏,您将丢失所有内容.区块链技术意味着跨服务器再现分类帐.

  3. 你可以重写git历史.将git push <remote> <branch> --forcewhere <branch>设置为先前的状态,而不是<remote>重写历史的状态.在区块链中,分类帐是不可变的历史记录.

  • "在区块链中,分类账是一个不可改变的历史." - git历史也是如此.当"重写历史记录"时,您从过去的某个点开始并添加新的提交.块链也是如此,事实上,每次fork发生时都会发生这种情况,即使它稍后被放弃了. (91认同)
  • 我们可以总结一下,通过应用特殊的工作流程并禁止多个操作,Git可以在块链模式下运行吗? (20认同)
  • 据我了解块链与Git,您还可以重写块链,除非您解决了哈希冲突问题.对于Git,是的,你可以重写,但所有的遥控器仍然有原始的历史.重写历史记录会创建新的哈希值和不同的树.如果块链没有超过这样的操作,那么这不是一个有效的参数,因为如果我愿意,我可以实现它.或者相反,我可以通过将分支设置为受保护来拒绝强制推送. (8认同)
  • @Paebbels是的,我同意这一点.默认情况下,经常使用它不是,但它有一个特殊的工作流程. (4认同)
  • @Holger只是git历史是可变的.在单个分支上执行`push -force`时,您将丢失对垃圾收集器清理的提交的引用.这与不是重写历史而是替代开发路径的fork不同. (3认同)
  • 对我来说,困难至少在于区块链技术所包含的定义.我将其定义为由三种技术组成:1)分布式分类帐,2)公钥/私钥,以及3)运行事务验证和块添加到区块链的程序.`git`可以以多种方式使用,不一定符合这个定义.但是,在定义特殊流程时,它可以.也许你可以更明确地概述这个论点中的漏洞?(我对错误持开放态度,并希望纠正我逻辑中的任何错误) (2认同)
  • 警告:这个答案是完全错误的。第 1 点,在 Git 中,每次提交也可以由多方独立验证(大多数重要项目都是如此)。第二个答案与 git 是否是区块链无关。我们也可以在单个服务器中隔离运行比特币,但它的用处不大。显然,没有主要的 git 项目在单个非隔离的机器上运行(Linux 存储库分布在比 bicoin 可能更多的机器上)。Git 默认允许重写,但可以通过调整来禁止它 (2认同)
  • 您的这两点都适用于用于存储加密货币分类帐的特定类型的区块链,但是,分类帐本身是数据结构,就像 git 在每次提交中拍摄快照的文件一样。验证区块的哈希值是加密货币的特征,而不是区块链的特征;将区块链分布在多个服务器上是加密货币的特征,而不是区块链的特征。区块链是一系列相互指向的哈希值,更改一个哈希值会影响后续的哈希值,而 git 正是这样做的。 (2认同)

Lum*_*umi 28

问题是:为什么 Git 不被视为“区块链”?因此,这是断言存在广泛的观点,即 Git 不是区块链(这一断言在本页之前的答案中得到了说明和证实),并询问了这种观点盛行的原因。这是一个很好的问题。

从字面上看这个问题,答案可能是区块链术语和概念作为称为“比特币”的数字货币操作的一部分而变得流行,因此与比特币的工作方式相关联:这是通过使用大量计算能力计算特定的哈希值,包括随机数以满足某些任意要求,据称没有中央权威,这是“独立”的,甚至可能是“民主的”,以及其余的库尔援助;由于这些东西在 Git 中看不到,所以 Git 不可能是区块链,对吧?所以这个问题会从字面上得到回答。

隐藏在这个初步问题背后的是另一个问题:什么是区块链?现在你可以在某个地方查找一个定义并将其复制到这里,但我没有这样做,因为我几年前就下定决心了,当时在听一个关于比特币的播客,该播客试图解释区块链的新概念,区块链就像 Git 一样工作,我不打算让我宝贵的理解被互联网上的随机声明误导。

那么什么是区块链?这句话是什么意思?

术语“区块链”中的任何内容都没有预先假定要求在内容中包含一个随机数,以便得出由许多前导零组成的散列。(这个要求只是为了能够通过计算能力来控制区块链,最终通过金钱来控制。)

“区块链”一词中没有任何内容以网络的存在为前提,更不用说去中心化的网络了。

“区块链”一词中的任何内容均不以任何“独立于”“中央权威”为前提。

术语“区块链”仅以链接在一起的(数据)块为前提。现在什么是链?它只是一个链接吗?不,它是一个强大的链接,旨在通过武力将事物联系在一起。

一个简单的链表不符合区块链的条件,因为列表中数据块的内容可能会被更改,而列表将继续来回链接就好了。这不是链条的工作方式。

要将数据块的链接变成数据块,需要以某种方式对块的内容进行校验和(摘要),并且该校验和(摘要)必须是链接的一部分,使其成为一个强大的链接。链接保护内容,防止其被更改。这是一个区块链。

这就是 Git 所做的,因此 Git 是一个区块链,或者如果您愿意,可以作为一个区块链工作。

闭上圈,让我们再问一次:为什么 Git 不被认为是“区块链”?这可能是因为很多人,甚至可能是绝大多数人,并不关注概念的本质,而是关注眨眼事故

  • 我同意你的观点(或者至少我不反对),Git 应该被视为区块链。但为了证实许多其他人有不同想法的证据(除了这里的其他答案),请参阅维基百科:https://en.wikipedia.org/wiki/Blockchain (3认同)
  • 您可以分叉区块链并重写区块,就像您可以分叉 git 存储库并重写历史记录一样。两者在某种意义上都是不可变的,而在另一种意义上则是可变的。 (3认同)

小智 19

像比特币这样的网络货币,使用分布式共识密码链块(merkle树).常见用法已将此缩短为"区块链"

虽然git使用了一系列块(merkle树),但它缺乏分布式共识密码组件,这些组件常用于"BlockChain"一词.

  • 如果没有具体说明“分布式共识”到底需要什么,这种区别是无关紧要的。如果 PoW 门槛很低,任何人都可以覆盖你的区块链。 (5认同)

Mig*_*ota 16

加密货币区块链不同; git没有p2p无信任共识机制.

  • 为什么您将去信任共识系统视为区块链的一部分?有很多方法可以在区块链中创建信任,对于 git 来说,只是您知道本地副本中的所有内容都无法在下一次拉取时删除,并且您指定要在远程副本中进行更改。只有在不清楚什么是正确的时候,你才需要去信任的共识。在 git 中,多个分支可以“正确”并将最终合并在一起。 (4认同)
  • 没有什么能阻止你用力推动。但是就像区块链向我保证一样,我可以检测到它,因为我的链无法验证这些提交是否基于它。*这就是区块链的重点,而不是去中心化的同意。在 git 中,我明确*不*希望对我合并的内容有一个同意协议(开发不是民主),但我在将它们合并到我的链中时实际上阅读了新的提交。所以我的副本*是*正确的,因为它包含我已经拥有的内容,因此可以验证(即通过查看合并冲突)以及我审查然后接受的内容。 (4认同)
  • @allo 在这方面你是对的,但是我在回答“加密货币区块链”中说,不是一般的区块链,但现在我想起来了,我的答案似乎并不适合被问到的问题,因为我是将系统视为一个整体而不是底层数据结构 (2认同)

Dan*_*nov 15

Blockchain不是随便一个块的任何链.

Blockchain当两个或多个被转移时,当有一种方法确定主链时,并且当该确定不需要中央权限时.

  • @JanusTroelsen“许可区块链”(或“私有区块链”)是一种矛盾修辞,实际上毫无意义,所谓的集中式区块链与常规服务器或常规 P2P 网络的功能没有任何区别。这些术语(私有/许可/集中式区块链)仅在专业社区之外使用。 (6认同)
  • 使用这个定义,“许可的区块链”没有任何意义,因为它们实际上拥有中央权威。所以你的定义与这个词的实际用法相矛盾。例如,参见像 Liquid 这样的半中心化(联合)区块链。 (3认同)
  • 像比特币这样需要不必要和非理性计算的区块链中的中央权威只是聚集了最多计算能力的一方。 (3认同)

Tin*_*ino 14

总结一下(对我来说):

虽然 Git 为您提供了完全的选择自由,但区块链是一个高度政治化的系统,您被迫信任他人

  • Git 是一个没有预定义共识算法的 Merkle Tree。

  • 区块链是具有预定义共识算法的默克尔树。

因此,如果你独自一人,Git 和区块链之间没有区别。当您信任 Git 和您自己时,您就已经达成了预定义的共识。

但当你处于网络中时,事情开始变得不同。


笔记:

  • 对于区块链来说,绝对不需要哈希值难以计算或定义“挖矿”之类的东西,或者拥有一些特定的软件来确保您参与某个网络。
    这一切可能是比特币(通常被称为加密货币,我不能完全同意)之类的东西的要求,但比特币既没有定义什么是区块链,区块链也不需要像比特币那样。

  • 共识算法不一定是基于某种加密协议的算法。例如,每天在当地报纸上发布您的 TIP(滥用)Git 作为某种区块链就足够了。

Git 很容易提供多种可能的共识算法供您选择:

  • 在报纸或类似报纸上发布 SHA(分布式且难以伪造)

  • 如果您处于极少数情况下,您已经是某个 GnuPG Web Of Trust 的一部分,那么您可以轻松地使用签名提交(或签名标签)来同意共识。

  • “Signed off:”变体不提供加密安全共识,但与Gerrit和 Fast-Forward-Only 之类的东西结合起来,它是一些定义明确的共识算法。

因此,要让 Git 成为区块链,你所需要的只是添加一些空气


一些不同的看法:

Git 本身并不是区块链。相比之下,它远小于区块链(缺乏预定义的共识算法),也远大于区块链(允许选择过多的共识算法,相当于 SCM 等)。


其他一些观察结果:

  • Git 分支与区块链分裂相同。虽然区块链分裂很少发生,但大多数 Git 存储库的分支 ( master+ HEAD)少于比特币的分裂

  • Git 总是有一个由你完成的明确共识,即你推送的 TIP。然而这仅适用于你而不适用于其他人。
    将 Git 存储库推送到某个共享的 Git 服务也可以视为共识。这种共识不需要以民主原则为基础。


非常个人的想法:

虽然区块链是一个被过度炒作的流行词,没有它也可以快乐地生活,但 Git 是完成工作不可避免的基本工具,是你离不开的基本必备工具之一,就像空气和水一样重要。这可能就是为什么像我这样的人不将 Git 称为区块链的原因。

青年MMV


Ale*_*x F 8

正如波克所说

Git 和区块链看起来很相似,因为它们都使用默克尔树来存储有序的带时间戳的交易。Merkle 树是一种树形数据结构,其中每个节点都标有其内容的加密哈希值,其中包括其子节点的标签。

第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,因此每个块都必须被挖掘,而 Git“块”可以通过简单的提交消息创建。

比特币的目的是增加交易秩序的信任。重点是最长的链,因为它的计算成本最高,因此最有可能是事实。

比特币通过要求散列满足某些参数(以特定数量的 0 开头)来实现这一点,通过增加消息中的值(“随机数”)直到找到满意的散列。这需要花费精力才能找到,但只需 1 次计算即可验证随机数;如果多个随机数产生令人满意的散列,则其中一个将较低并被视为真相。其他身份验证方案通过将哈希值集中发布给权威机构(可能通过网络协议或某种其他方法投票)来使哈希值变得可信。

区块链数据仅限于交易,交易必须符合验证。交易必须有效才能包含在下一个区块中。比特币交易对应于现实世界中一些重要的事情,证明使用昂贵的区块来记录这种转移是合理的,例如货币价值的交换。我们实际上并不关心最终的账本,它只是现实世界中某些事物的隐喻。

相比之下,Git 块是任意的,因为提交可以包含任意数量的数据。价值在于将数据的变化组织到 git 树中,因为我们关心的是最终产品,它是通过 git 存储库的存在来验证的。

Git 的目的是让廉价的“账本”能够跟踪多种产品替代品。Git 中的“账本”是我们关心的,它是我们的最终产品;交易数据仅记录产品是如何构建的。我们希望以非常低的成本来制作最终产品的多个版本,只需足够的开销来要求创建者记录他们如何构建此产品。不对数据进行显式验证,如果最终产品看起来不错,则可以对其进行维护,并且这种存在使得拥有该产品的创建链非常有用。如果最终产品不好或提交顺序无效,则该“分类帐”将在垃圾收集期间被删除。

第二个区别是区块链交易必须来自先前的有效来源。在 Git 中,我们不关心你使用什么数据来扩展树。在区块链中,交易必须来自先前的有效来源。从这个意义上说,Git 跟踪我们环境的扩展,而区块链则跟踪封闭环境内的价值交换。


Adi*_*ngh 5

区块链和 git 的目标不同,尽管两者都使用默克尔树作为数据结构。

\n\n

Ablockchain通常由遵守节点间通信协议并验证新块的对等网络进行管理。一旦记录,任何给定区块中的数据都无法在不更改所有后续区块的情况下进行追溯更改,这需要网络多数人的共识。

\n\n

根据比特币白皮书:

\n\n
\n

纯粹的点对点版本的电子现金将允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名提供了解决方案的一部分,但如果仍需要受信任的第三方来防止双重支出,则主要优势就会丧失。我们提出了一种使用点对点网络来解决双重支出问题的解决方案。网络通过将交易散列到持续的基于散列的工作证明链中来为交易添加时间戳,形成一条在不重做工作证明的情况下无法更改的记录。最长的链不仅可以作为所见证事件序列的证明,而且还可以证明它来自最大的 CPU 算力池。只要大部分 CPU 能力由不合作攻击网络的节点控制,它们就会生成最长的链并超过攻击者。网络本身需要最少的结构。消息在尽力而为的基础上广播,节点可以随意离开和重新加入网络,接受最长的工作量证明链作为它们离开时发生的情况的证明

\n
\n\n

尽管Git是一个分布式版本控制系统,用于在软件开发过程中跟踪源代码的更改。它是为协调程序员之间的工作而设计的,但它也可用于跟踪任何文件集中的更改。其目标包括速度、数据完整性以及对分布式非线性工作流程的支持。

\n\n

正如莱纳斯·托瓦兹所说:

\n\n
\n

在很多方面,你都可以将 git 视为一个文件系统 \xe2\x80\x93,它是内容可寻址的,并且具有版本控制的概念,但我确实是从文件系统的角度来解决这个问题的。 n 人(嘿,内核就是我所做的),而且我实际上对创建传统 SCM 系统的兴趣绝对为零。

\n
\n


ear*_*zon 5

没有理由不将 Git 视为区块链。Git 专注于一组非常特殊(且重要)的资产:源代码。这种情况下的共识是手动的,我们可以认为一个交易(提交)在合并到发布分支时被接受。实际上,考虑到交易(提交)的数量,Git 是迄今为止最成功的区块链。

摘自:https : //arxiv.org/pdf/1803.00892.pdf “……我们定义“区块链”和“区块链网络”,然后讨论两种截然不同的、众所周知的区块链网络类别:加密货币和Git 存储库...”

另请参阅下一篇论文,该论文解释了为什么 Google 使用单个 monorepo 作为单一事实来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/