Git是否使用SHA-256来计算提交哈希值?



当前版本的git(2.30.0)是否已经默认使用SHA256来计算提交哈希值?

如果没有,如何为一个新的git仓库启用SHA-256,以及如何检查某个git仓库是使用SHA-256还是SHA-1作为其提交哈希?

使用SHA-1还是SHA-256是Git最新版本中每个存储库的设置。我们的计划是最终使以SHA-256格式在存储库中存储数据并使用SHA-1名称或SHA-256名称访问对象成为可能。SHA-1仍然是默认的。

请注意,SHA-256模式是实验性的,理论上可以改变,但没有计划这样做。Git开发人员正在尽一切努力不破坏与现有SHA-256存储库的兼容性。

要使用SHA-256创建一个新的存储库,使用--object-format选项到git init。如果您想知道本地存储库使用哪种算法,请运行git rev-parse --show-object-format,它将输出sha1sha256。要查看远程存储库的散列,可以使用git ls-remote并验证打印的散列的长度。

请注意,没有主要的伪造器支持SHA-256,因此这样的存储库不能上传到他们。

根据git-init2.30.0版本的手册页,对sha-256的支持仍被认为是实验性的:

--object-format=<format
Specify the given object format (hash algorithm) for the
repository. The valid values are sha1 and (if enabled) sha256.
sha1 is the default.
THIS OPTION IS EXPERIMENTAL! SHA-256 support is experimental and
still in an early stage. A SHA-256 repository will in general not
be able to share work with "regular" SHA-1 repositories. It should
be assumed that, e.g., Git internal file formats in relation to
SHA-256 repositories may change in backwards-incompatible ways.
Only use --object-format=sha256 for testing purposes.

根据版本2.30.0的git-init手册页,对sha-256的支持仍被认为是实验性的:

实际上,Git 2.42 (Q3 2023)降低了对SHA-256存储库的警告,这是一个实验性的好奇。
目前还不支持它们与传统的SHA-1存储库进行互操作,但是在这一点上,没有计划对SHA-256存储库进行破坏性更改,也不再需要这样一个措辞强烈的警告。

参见Adam Majer (AdamMajer)的commit 8e42eb0 (31 Jul 2023)。
(由juno C Hamano -gitster合并)

doc: sha256不再是实验性的

署名:Adam Majer

删除那些阻止人们使用sha256存储库的可怕措辞,不是因为与sha1存储库的互操作性问题,而是因为担心他们的工作在将来的某个版本的git中突然变得不兼容。

我们应该清楚,目前sha256存储库不能与sha1存储库一起工作,但不要再说这些可怕的话了。

git现在在它的手册页包含:

总是使用

。默认值为"sha1"。参见git init中的--object-format

object-format-disclaimer的手册页现在包含:

注:目前SHA-256之间没有互操作性库和SHA-1库

历史上,我们警告过SHA-256存储库以后可能需要当我们引入这种互操作性时,向后不兼容的变化特性。今天,我们只期望兼容的更改。此外,如果是这样更改被证明是必要的,可以预期SHA-256存储库用今天的Git创建的文件可以在未来的Git版本中使用不丢失数据

最新更新