假设我们正在尝试生成一个安全关键项目的构建。
当我运行git clone <url>
时,我如何保证我签出的代码与GitHub上的代码相同?只比较提交哈希就足够了吗?
假设我的git
安装不是恶意的,我是否应该假设git
覆盖了我?
当我运行gitclone时,我如何确保我签出的代码与GitHub上的代码相同?
最简单的方法是使用git log
,查看顶部的提交哈希,并将其与GitHub上最新提交的哈希进行比较。
只比较提交哈希就足够了吗?
Git使用SHA1。可能会导致冲突,从而使黑客使用相同的提交哈希创建其他内容。另一种可能性是使用与数据不匹配的哈希创建提交。
假设我的git安装不是恶意的,我应该假设git已经覆盖了我吗?
但只要你使用HTTPS/SSL,就没有人偷过SSL证书(如果有人从GitHub偷了thr one,这将是一件大事,他也可以更改web UI(,git clone
就不会检查其他任何内容(假设你使用了正确的URL(。
如果你使用HTTP,你就没有SSL证书的保护,其他人可以向你发送任何其他内容。
这正是Linus Torvalds在2007年(Git成立两年(谷歌Git演示(视频(中提出的观点:见幻灯片10
57’左右:
拥有一个好的哈希有助于信任你的数据,它碰巧也有一些其他好的功能。这意味着,当我们对对象进行散列时,我们知道散列实际上分布良好,我们不必担心某些分布问题。
因此,从内部来说,这意味着从实现的角度来看,我们可以相信哈希非常好,我们可以使用哈希算法,并且知道没有坏情况。
因此,也有一些理由喜欢加密方面,但这实际上是关于信任数据的能力。
我向您保证,如果您将数据放在git中,您可以相信这样一个事实:五年后,在将数据从硬盘转换为DVD并复制到任何新技术后,五年后您可以验证您返回的数据与您放入的数据完全相同
这是您真正应该在源代码管理系统中寻找的东西。
即使SHA1在理论上可能会被破坏(不同的内容具有相同的哈希(,Git也很难做到这一点,而且它很快就会有SHA2哈希用于提交。
所以,是的,将您的HEAD提交(git rev-parse
(与GitHub上的提交(git ls-remote
(进行比较就足够了:
git rev-parse --short HEAD
git ls-remote