相关疑难解决方法(0)

Git如何处理blob上的SHA-1冲突?

这可能永远不会发生在现实世界中,并且可能永远不会发生,但让我们考虑一下:假设您有一个git存储库,进行提交,并且变得非常不幸:其中一个blob最终拥有相同的SHA-1另一个已存在于您的存储库中.问题是,Git将如何处理这个?简直失败了?找到一种方法来链接两个blob并根据上下文检查哪一个需要?

更多的是脑筋急转弯而非实际问题,但我发现这个问题很有趣.

git hash-collision

527
推荐指数
6
解决办法
7万
查看次数

git中的哈希冲突

如果我在使用git时遇到哈希冲突会发生什么?

例如,我设法提交两个具有相同sha1校验和的文件,git会注意到它还是损坏了其中一个文件?

可以改进git以适应它,或者我是否必须更改为新的哈希算法?

(请不要通过讨论这个问题来转移这个问题 - 谢谢)

git hash sha1 hash-collision

162
推荐指数
6
解决办法
4万
查看次数

为什么Git使用加密哈希函数?

为什么Git使用加密哈希函数SHA-1而不是更快的非加密哈希函数?

相关问题:

Stack Overflow问题为什么Git使用SHA-1作为版本号?问为什么Git使用SHA-1而不是序列号进行提交.

git hash-function

135
推荐指数
1
解决办法
2万
查看次数

git的半秘密空树对象是否可靠,为什么没有符号名称呢?

Git有一个众所周知的,或者至少是众所周知的空树,其SHA1是:

4b825dc642cb6eb9a060e54bf8d69288fbee4904
Run Code Online (Sandbox Code Playgroud)

(你可以在任何仓库中看到这个,甚至是新创建的仓库,用git cat-file -tgit cat-file -p).

如果您努力工作并且非常小心,您可以使用这个空树来存储没有文件的目录(请参阅如何将空目录添加到git存储库的答案),尽管这不是一个好主意.

它作为一个参数更有用git diff-tree,其中一个示例钩子可以做到.

我想知道的是,

  1. 这有多可靠 - 即,某些未来版本的git没有编号的git对象4b825dc642cb6eb9a060e54bf8d69288fbee4904
  2. 为什么空树没有符号名称(或者有一个?).

(创建符号名称的快速而肮脏的方法是将SHA1放入,例如,.git/Nulltree不幸的是,您必须为每个repo执行此操作.似乎更好地将幻数放在脚本中等等.我只是有一般的厌恶到魔术数字.)

git

107
推荐指数
2
解决办法
2万
查看次数

如何在Git中找到分支的哈希值?

给定本地/远程分支名称,我如何获得该分支指向的提交的哈希值?

git

64
推荐指数
3
解决办法
4万
查看次数

对于100,000个对象,Git非常慢.任何修复?

我有一个"新鲜的"git-svn repo(11.13 GB),其中有超过100,000个对象.

我已经做好了

git fsck
git gc
Run Code Online (Sandbox Code Playgroud)

在初步结账后的回购.

然后我试着去做

git status
Run Code Online (Sandbox Code Playgroud)

执行git状态所需的时间是2m25.578s和2m53.901s

我通过发出命令测试了git status

time git status
Run Code Online (Sandbox Code Playgroud)

5次,所有时间都在上面列出的两次之间.

我在Mac OS X上执行此操作,本地而非通过VM.

它不应该花这么长时间.

有任何想法吗?救命?

谢谢.

编辑

我有一个同事坐在我旁边,有一个类似的盒子.减少RAM并使用jfs文件系统运行Debian.他的git状态在同一个回购中运行.3(它也是一个git-svn checkout).

另外,我最近在这个文件夹上更改了我的文件权限(到777),它大大缩短了时间(为什么,我没有线索).我现在可以在3到6秒之间完成任务.这是可以控制的,但仍然很痛苦.

git performance git-svn

54
推荐指数
4
解决办法
5万
查看次数

Git(Hub)如何处理来自短SHA的可能冲突?

Git和GitHub都显示SHAs的短版本 - 只是前7个字符而不是全部40个 - 并且Git和GitHub都支持将这些简短的SHA作为参数.

例如 git show 962a9e8

例如https://github.com/joyent/node/commit/962a9e8

鉴于可能性空间现在降低了几个数量级,"仅" 2.68亿,Git和GitHub如何防止碰撞?他们如何处理它们?

git cryptography github sha

53
推荐指数
3
解决办法
1万
查看次数

Git如何创建唯一的提交哈希值,主要是前几个字符?

我发现很难围绕Git如何创建完全独特的哈希,即使在前4个字符中也不允许相同的哈希.我只能使用前四个字符在Git Bash中调用提交.是否在算法中明确决定第一个字符是"超" - 唯一且不会与其他类似的哈希冲突,或者算法是否以相同的方式生成哈希的每个部分?

git algorithm hash git-hash

19
推荐指数
2
解决办法
9912
查看次数

单向散列(不是加密/安全),使用SHA256(不是MD5,SHA-1)?

在新系统上,我们需要单向散列来计算来自二进制输入的数字签名(例如,一千字节的文本或更大的文本和二进制文件).需求类似于Scons(构建系统)散列命令行和源文件,以及Git(版本控制系统)如何散列文件以计算存储/同步签名.

回想一下,Scons使用MD5,Git使用SHA-1.

虽然MD5和SHA-1已被"破坏",但Scons和Git都没有专门用于安全性(例如,它不存储密码),因此一般做法仍然认为这些算法可以接受.(当然,由于传统的采用,这部分是合理化的.)

问题:您是否会在新系统中使用SHA256(不是MD5或SHA-1)进行(非加密/安全)单向散列?

关注的是:

  1. MD5和SHA-1的采用历史悠久
  2. SHA256相对较新(没有那么多的历史记录),但似乎目前推荐用于新工作(但我的应用并不特别要求"更强"的算法强度)
  3. SHA256的计算时间更长
  4. SHA256生成一个更长的密钥(这些密钥将用作目录/文件名,并存储在索引文件中),但我想我可以截断生成的密钥(散列不太强,但应该足够),或者只是假设存储很便宜和文件系统可以处理它.

我特别感兴趣的是一个与Scons或Git社区一致的答案,"我们会永远保留我们的!" 或者"我们希望尽快转向新哈希!" (我不确定他们的计划是什么?)

git hash md5 scons sha256

14
推荐指数
2
解决办法
8681
查看次数

JGit如何从RevCom中获取SHA1?

这似乎是一个愚蠢的问题,但我无法在任何地方找到相关文档.

如何获取RevCommit对象的SHA1?

jgit

13
推荐指数
1
解决办法
2518
查看次数