首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么GIT为同一个二进制文件(图片)生成的SHA1与其他工具生成的SHA1不同?

GIT为同一个二进制文件生成的SHA1与其他工具生成的SHA1不同的原因是因为GIT在计算SHA1时,不仅仅考虑了文件内容,还考虑了文件的元数据信息。

在GIT中,每个文件都有一个元数据信息,包括文件的权限、所有者、修改时间等。当计算文件的SHA1时,GIT会将文件内容和元数据信息一起进行计算,生成一个唯一的SHA1值。

而其他工具可能只考虑了文件的内容,而忽略了元数据信息,因此计算出的SHA1值与GIT不同。

这种设计使得GIT能够更精确地追踪文件的变化,即使文件内容相同但元数据信息不同,也能够生成不同的SHA1值,从而保证了版本控制的准确性。

总结起来,GIT为同一个二进制文件生成的SHA1与其他工具生成的SHA1不同的原因是因为GIT考虑了文件的元数据信息,而其他工具可能只考虑了文件的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

改变世界一次代码提交

Git 本质就是一系列文件对象集合,代码文件是对象、文件目录树是对象、commit 也是对象。这些文件对象名称即内容 SHA1 值,SHA1 哈希算法40位。...跟其他SCM(软件配置管理)工具不同是,Git CHANGESET 对象不记录文件重命名和属性修改操作,也不会记录文件修改 Delta 信息等,CHANGESET 中会记录父节点 CHANGESET...Linus 解释了“当前目录缓存”设计,该缓存就是一个二进制文件,内容结构很像 TREE 对象, TREE 对象不同是 index 不会再包含嵌套 index 对象,即当前修改目录树内容都在一个...write-tree: 将缓存目录树信息生成 TREE 对象,并写入对象数据库中。TREE 对象数据结构:'tree ' + 长度 + \0 + 文件树列表。...cat-file: 由于所有的对象文件都经过 zlib 压缩,因此想要查看文件内容的话需要使用这个工具来解压生成临时文件,以便查看对象文件内容。

81161

Git基本原理介绍

图片 图片 我们这里重点看下,生成 8d 这个目录以及下面的文件。而其名称由来是因为 Git 对其进行了一个叫做 SHA1 Hash 算法,用于将文件内容或者字符串变成这么一串加密字符。...图片 理解 blob 对象和 SHA1 了解 Git blob 对象和 SHA1 之前关系和对应计算!...Hash 算法是把任意长度输入通过散列算法变化成固定长度输出,根据算法不同生成长度也有所不同。...SHA512 - 512bit - 安全 但是,当我们使用工具对上述文件内容进行 SHA1 计算时候,会发现并没有我们在 .git 目录里面看到那样,这是为什么呢?...图片 而更加深层次理解,就要从执行 git add 命令后生成相关 object 对象,但是其存储文件类容、大小和内容,并不包含文件名称信息。

35430

Git存储原理

Git vs SVNGit 出现前,主流版本控制系统(SVN...)一般基于增量(delta-based)系统,如下图:Git 则是基于快照(snapshot),即针对每一个被修改文件生成一个快照...毕竟针对被修改文件Git 生成是完全快照,而其他系统只是生成增量文件。...1哈希值,前2位位目录名,其他38位文件名,存储路径即.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4> git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4...但是,Git 会时不时(或者当你手动执行git gc命令后)地将这些对象打包成一个称为“包文件(packfile)”二进制文件(存储在.git/objects/pack),以节省空间和提高效率。...commit 哈希值标签(轻量标签)可以看出,所谓引用只是一个记录了 commit 哈希值文件,非常轻量,这也是为什么分支/标签创建、删除速度能这么快原因。

5810

源码解析:Git第一个提交是什么样

cat-file 是一个辅助工具,在正常开发工作流中一般不会使用到。...文件路径和名称根据sha1值决定,取sha1第一个字节hex值目录,其他字节hex值为名称,比如sha1: 0277ec89d7ba8c46a16d86f219b21cfe09a611e1...文件头大小32字节,一个变更文件信息大小至少是63字节。其中:文件头中sha1值由整个索引文件内容(文件头 + 变更文件信息)计算得到。...变更文件信息sha1值由变更文件内容(压缩后)计算得到。 哈希算法 该 Git 版本中使用哈希算法 sha1算法 ,代码中使用是 OpenSSL 库中提供sha1算法。...关于细节 问:为什么 .dircache/objects/ 目录下面要以 sha1 值前一个字节 hex 值作为子目录?

1.8K30

Git 补丁 patch 使用方法

Git patch 功能支持开发者通过文件别人分享自己改动,本文记录 patch 使用方法。...简介 在同一个 git 管理仓库下,当然直接使用 git 常用命令可以很好地和其他开发者共享工作,当开发者不处在同一个版本管理平台下,或仅作临时修改时,则可以通过 patch 打补丁方式共享代码改动...生成 patch git diff 指定文件生成 patch 文件 patch 补丁即为根据 git diff 生成文本内容文件,最简单生成方法 git diff > test.patch...首先,执行以下命令,自动合入 patch 中不冲突代码,同时保留冲突部分 1 git apply --reject xxxx.patch 同时会生成后缀 .rej 文件,保存没有合并进去部分内容...git am 可以一次合并一个文件,或者一个目录下所有的 patch: 1 git am *.patch 再次声明,am 复现 commit ID 会和之前不同,因此建议在有仓库管理情况下用

4.5K20

SHA-1被破解始末

SHA1有如下特性:不可以从消息摘要中复原信息;两个不同消息不会产生同样消息摘要。 也就是上面maven那些sha1文件都是jar和pom对应校验文件。...为什么强调pratical呢?因为在这之前有人就说sha1不安全,但仅仅停留在理论层面。 2013年,Marc Stevens发表了一篇论文,概述了创建SHA-1碰撞理论方法。...当两个不同数据(文档,二进制或网站证书)散列到如上所示相同摘要时,会发生冲突。 实际上,对于安全散列函数不应发生冲突。...GIT是否受影响? GIT强烈依赖SHA-1来识别和完整性检查所有文件对象和提交。 基本上可以创建两个具有相同头提交哈希和不同内容GIT存储库,例如良性源代码和后代。...这种攻击需要超过9,223,372,036,854,775,808个SHA1计算。这使得等价处理能力6,500年单CPU计算和110年单GPU计算。 这个攻击强力攻击相比怎么样?

6.1K80

sha1sum(1) command

SHA1 对任意长度信息逐位进行计算,产生一个二进制长度 160 位(十六进制长度 40 位)散列值,不同文件产生相同消息摘要可能性非常非常之低。...当不提供 FILE 或者 FILE -,从标准输入读取文件名。 3.选项说明 选项 md5sum 完全一致。 -b, --binary 以二进制模式读取文件,而不是默认文本模式。...4.常用示例 (1)生成文件 SHA1 值,以文件 /etc/passwd 例。...(2)生成文件 SHA1 值到输出到指定文件。 sha1sum /etc/passwd > passwd.sha1 (3)校验文件 SHA1 值。 使用上面第二步生成校验文件。...在 2005 年,针对 SHA1 首个理论性攻击被提出,该攻击使得 SHA1 碰撞(collision)攻击成为可能。碰撞攻击是指找到两个不同输入数据,但它们生成相同哈希值。

21930

Git 工具 - 子模块: submodulesubtree使用

通俗上理解, 一个Git仓库下面放了多个其他Git仓库,其他Git仓库就是我们父级仓库子仓库。...可以端详官网:https://git-scm.com/book/zh/v2/Git-工具-子模块 多个父级仓库都依赖同一个子仓库,但是子仓库自身不单独进行修改,而是跟随父级项目进行更新发布,其他依赖子仓库项目只负责拉取更新即可...,构成了Git对于文件内容追踪基础: blob: 二进制文件,可以通俗理解文件修改 tree: 记录了blob对象和其他tree对象修改,通俗理解目录 commit: 提交对象,记录了本次提交...子仓库的确是一个commit对象, file mode160000,这是Git中一种特殊模式,表明我们是将一次提交commit记录在Git当中,而非将它记录成一个子目录或者文件。...subtree https://efe.baidu.com/blog/git-submodule-vs-git-subtree/ 转载本站文章《Git 工具 - 子模块: submodulesubtree

2.2K10

Git 学习路线图:为什么每个开发者都应该了解它?

还将提供在各种操作系统上安装和配置 Git 详细指南。”一、概述 本文分享分布式版本控制工具Git。本系列主要从四个角度进行讲解:git是什么?git有什么用?为什么要用git?要学什么?...这个版本号在git当中会使用一个hash值进行唯一区分;这个hash函数使用sha1(不仅git使用这个sha1生成hash值,一些著名软件,如redis、lua等也是使用sha1产生hash值)...当代码出现bug时,可以还原到历史指定版本。对比不同版本之间文件差异。使用git diff工具进行比较文件差异。1.3、为什么git?主要因为Git是目前最热门分布式版本控制工具。...三、安装Git 3.1、Linux上安装git在linux上建议用二进制方式来安装 git,可以使用发行版包含基础软件包管理工具来安装,如果你是 CentOS 或者 Fedora 操作系统,可以使用...当你想针对特定项目使用不同用户名称邮件地址时,可以在那个项目目录下运行没有 --global 选项命令来配置。很多 GUI 工具都会在第一次运行时帮助你配置这些信息。

9600

Git实战

学习Git有一段时间了,一路上也一直在写有关于Git方面的文章,但总觉得不是我想要,就是感觉有点肉肉,不够直接,不够马上出效果,所以才有了这篇文章,当然这文章可能会不断更新和修正,希望读者可以作为一个工具文章使用...] 本地新建Git工程 现在打算将本地工程,放到Git仓库进行托管了,并且远程Git仓库已经创建了该项目的工程 #本地初始化工程,会生成一个.git文件 git init #将本地工程远程仓库中项目进行关联...要解决此问题,这样操作: 进入 github 中该项目的 Settings 页面; 设置 Default Branch 其他分支(例如 master); 重新执行删除远程分支命令。...git show [SHA1] [文件名] 查看本地Git绑定远程仓库信息 git remote -v 关于切换分支逻辑 如果存在未被git追踪文件git是会将其忽略 如果存在已追踪且被修改或删除...[相对于父模块相对路径]不一致 创建完成以后会生成.gitmodules.gitattributes这两个文件 .gitmodules和.git/config保存着子模块信息 从远程仓库获取所有模块数据

84510

常用几个PHP加密函数

除此外就是非对称加密,加密和解密秘钥不是同一个,如果从安全性而言,加密信息如果还想着再解密回来,非对称加密无疑是最为安全方式。...,第二个raw_output布尔值,默认为false,如果设置true,md5()则会返回原始 16 位二进制格式报文摘要 2.md5()单向加密,没有逆向解密算法,但是还是可以对一些常见字符串通过收集...,如果没有提供,则默认由PHP自动生成【盐值只能取两位】);返回散列后字符串或一个少于 13 字符字符串,后者为了区别盐值。...(三)、sha1 string sha1 ( string str[,boolraw_output = false ] 1.跟md5很像,不同sha1()默认情况下返回40个字符散列值,传入参数性质一样...编码就会变成一堆以Ascll码连接字符串,这会更有利于文件传输,当然base64作用在文件传输。

1.4K20

数据结构-Hash常见操作实践

任何文件在计算机中都可以表示成二进制码串,所以,比较笨办法就是,拿要查找图片二进制码串图库中所有图片二进制码串逐一比对。如果相同,则说明图片在图库中存在。...如果不同,说明这个文件块不完整或者被篡改了,需要再重新从其他宿主机上下载这个文件块。06.散列函数场景散列函数是设计一个散列表关键。它直接决定了散列冲突概率和散列表性能。...07.Git版本控制以Git代表众多版本控制工具都在使用SHA1等散列函数检查文件更新包括GitHub在内众多版本控制工具以及各种云同步服务都是用SHA1来区别文件,很多安全证书或是签名也使用SHA1...长期以来,人们都认为SHA1是十分安全,至少大家还没有找到一次碰撞案例。08.云存储文件场景现在大部分网络部署和版本控制工具都在使用散列算法来保证文件可靠性。...,减少了查找次数用hashcode判断两个对象是否相等可以吗肯定是不可以,因为不同对象可能会生成相同hashcode值。

68720

Python实现各种加密,接口加解密不再难

,或压缩包,执行md5后,就可以生成一个固定长度128bit串。...2 用途 加密注册用户密码。 网站用户上传图片 / 文件后,将MD5值作为文件名。(MD5可以保证唯一性) key-value数据库中使用MD5值作为key。 比较两个文件是否相同。...SHA1基于MD5,加密后数据长度更长,它对长度小于264输入,产生长度160bit散列值。比MD5多32位,因此,比MD5更加安全,但SHA1运算速度就比MD5要慢。...DES是一个分组加密算法,典型DES以64位分组对数据加密,加密和解密用同一个算法。...这3类加密方式都各自包含不同加密算法,如单向加密方式中包含MD5、SHA1、SHA256等,这些算法又称为“哈希算法”或“散列算法”或“数据摘要算法”。

6.5K20

git 补丁 - diff 和 patch 使用详解

通过 git diff 生成文件不含有 commit 信息,可以指定文件生成 diff,也可以指定单个 commit, 多个 commit 生成 。...在开发当中,有时候,我们需要进行代码迁移,这时候就可以使用补丁,方便又快捷 ---- git diff 指定文件生成 patch 文件 patch 补丁即为根据 git diff 生成文本内容文件,最简单生成方法...使用命令行 git diff 【commit sha1 id】 【commit sha1 id】 > 【diff文件名】 git format-patch 当前分支所有超前master提交: git...第一步:首先,执行以下命令,自动合入 patch 中不冲突代码,同时保留冲突部分 git apply --reject xxxx.patch 同时会生成后缀 .rej 文件,保存没有合并进去部分内容...---- 题外话 在实际开发当中,我们 apply patch 时候,通常会使用 git 图形工具,因为一旦产生冲突,解决比较方便,比较常用 git 工具有 sourceTree, TortoiseGit

35.5K52

Git 内部原理之 Git 对象哈希

Git对象hash方法 Git数据对象、树对象和提交对象hash方法原理是一样,可以描述: header = " " + content.length + "\0" hash =...各种Git对象hash方法相同,不同在于: 头部类型不同,数据对象是blob,树对象是tree,提交对象是commit; 数据内容不同,数据对象内容可以是任意内容,而树对象和提交对象内容有固定格式...\n,而不是我们直观认为what is up, doc?。 验证前面提到Git对象hash方法,我们使用openssl sha1来手动计算what is up, doc?...| openssl sha1 bd9dbf5aae1a3862dd1526723246b20206e5fc37 可以发现,手动计算出hash值git hash-object计算出来一模一样。...需要注意是,部分是二进制形式sha1码,而不是十六进制形式sha1码。

1.3K20

Unity AssetBundle

serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独文件(只有一个)。 resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。...{ //此处根据加载ab包方式进行相应卸载 } } 文件校验(CRC、MD5、SHA1) CRC、MD5、SHA1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据完整性...Unity在加载Ab包之后,会通过计算生成一个校验值,去和传递过来校验值进行比对,从而判断数据是否完整。 三种校验算法不同点: 算法不同。...CRC校验位长度跟其多项式有关系,一般16位或32位,MD5是16个字节(128位),SHA1是20个字节(160位); 校验值称呼不同。...CRC安全性跟多项式有很大关系,相对于MD5和SHA1要弱很多;MD5安全性很高,SHA1安全性最高。 效率不同,CRC计算效率很高;MD5和SHA1比较慢。 用途不同

1.2K30

10 分钟重新认识 GIT

Git 起源和基础知识 git 是十多年前 Linus 不爽现有的版本控制软件,花了大概 10 天功夫做出来一个工具(初代)— 大佬就是这么牛逼,不爽就撸袖子干,哪儿那么多废话。...相比于 cvs/svn 这些「中心化」,以 diff 基础存储更新传统版本控制软件不同是,git 认为每个文件一旦写入对象数据库中都是不可更改(immutable),任何微小修改,都会在数据库中形成一个新对象...这个文件内容是 README.md 内容,文件名是其 sha1 后 base16 编码字符串。注意这里用了两层目录结构,这样在有很多对象时候不至于目录内容太多而过载。...这样有两个好处:1) 相同内容文件,即便拷贝多份,依然只存储一份数据 — 这多见于二进制文件,比如图片;2) 更改文件名只是生成一个新 tree,并不需要生成 blb。...由此可以看出 git 关心是项目的 snapshot,并不关心单个文件。 如果你严格按照我之前步骤操作,至此你文件 blob 和 tree 两个对象 sha1 哈希应该和我一样。

50010
领券