让我通过说我知道发生这种情况极其微不足道的几率来说明这一点.我知道制造它或多或少是不可能的,并且极不可能"在野外"发生.这只是关于Git内部的假设问题.
所以,这是我的问题:如果两个Git提交哈希相同,会发生什么?对于初学者:
我想知道git SHA所依赖的所有参数是什么?我想除了提交的内容之外,还会有其他一些参数,例如时间戳等,SHA的构建依赖于此。
我对这取决于的所有此类参数都感兴趣。我也对所有这样的参数都相同或强制相同而导致两个人进行的任何两次提交的git SHA完全相同的情况感兴趣。
假设我有提交哈希,但没有对git存储库的访问权限,是否有可能获得提交提交的时间?
如何才能做到这一点?
根据此答案,提交哈希包含完成的日期和时间。
例:
1484e89060b2043be0b71209bacc2254161f1a8f被做了Wed Sep 3 09:30:59 2014 +0300。
我已经将连接到字符串的文件名列表排序,并希望通过唯一的校验和来标识每个这样的字符串.
这些字符串的大小至少为100个字节,最多为4000个字节,平均为1000个字节.字符串的总数可以是任何值,但更可能是在ca.的范围内.10000.
CRC-32适用于此目的吗?
例如,我需要以下每个字符串具有不同的固定长度(最好是短)校验和:
"/some/path/to/something/some/other/path"
"/some/path/to/something/another/path"
"/some/path"
...
# these strings can get __very__ long (very long strings are the norm)
Run Code Online (Sandbox Code Playgroud)
CRC-32哈希的唯一性是否因输入长度而增加?
为此目的,是否有更好的校验和选择?
每次进行提交时,git / hg都会生成一个SHA来在存储库的历史记录中唯一标识该提交。
假设我要合并两个存储库(我们没有关于哪个存储库的信息)。这就提出了一个问题:如果有人想要提交相同合并仓库的特定提交,会不会有重复的SHA哈希值在引起评论时混淆git?如果不是这样,git会做什么?
最终,我猜问题还是:全世界的每个存储库都有重复的哈希值吗?
我一直以为每个git对象都有一个独特的sha.然后,当我列出一个git树时,我发现了这个:
...
100644 blob fc47072354934eb062321af9d1c4897244562b67 exp2f-inputs
100644 blob fc47072354934eb062321af9d1c4897244562b67 expf-inputs
...
100644 blob 7eb7bda5e433f5df0fd6fec001c69cab7a08ebdb fmaxf-inputs
...
100644 blob 7eb7bda5e433f5df0fd6fec001c69cab7a08ebdb fminf-inputs
...
100644 blob 50a97394769447a692318ccefe333b494da7cc97 log2f-inputs
100644 blob 50a97394769447a692318ccefe333b494da7cc97 logf-inputs
...
Run Code Online (Sandbox Code Playgroud)
这些文件来自glibc.
我的问题是,sha对于每个git对象,那些不应该是唯一的吗?
我正在尝试更新提交消息,但同时保持相同的哈希值。
我尝试了 --message-callback 和 --commit-callback 这两个选项,但无论我选择哪一个,它都会生成新的哈希值。我是这样做的:
python3 git-filter-repo.py --preserve-commit-hashes --message-callback (or --commit-callback) '
if b"blabla" not in message:
message = b"MyMessage " + message
return message' --force
Run Code Online (Sandbox Code Playgroud)
这是一种错误吗?或者我做了一些完全错误的事情?
任何帮助表示赞赏