nix-prefetch-git sha256 要求对标签使用修订版
nix-prefetch-git sha256 requirement with using a revision over a tag
问题
当 nix-prefetch-git
与 --rev
一起使用时,我们真的还需要 sha256 吗?
假设
我理解将 git
与 tags
一起使用时的这一要求,因为标签可以重新附加到不同的版本。
所以我目前的理论是,我们不信任 git 通过传递额外的 sha256 哈希来获取或处理文件的方式。遵循这一概念,我们可以以一种 git
永远无法影响的方式计算哈希值。
正确吗?
nix-prefetch-git 示例
nix-prefetch-git https://github.com/ugorji/go --rev 9831f2c3ac1068a78f50
Leeres Git-Repository in /tmp/git-checkout-tmp-bPibjanm/go-9831f2c/.git/ initialisiert
remote: Counting objects: 2220, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 2220 (delta 4), reused 5 (delta 2), pack-reused 2208
Empfange Objekte: 100% (2220/2220), 2.39 MiB | 2.86 MiB/s, Fertig.
Löse Unterschiede auf: 100% (1706/1706), Fertig.
Von https://github.com/ugorji/go
* [neuer Branch] master -> origin/master
* [neues Tag] v.1.1-beta -> v.1.1-beta
* [neues Tag] v1.1 -> v1.1
Zu neuem Branch 'fetchgit' gewechselt
removing `.git'...
git revision is 9831f2c3ac1068a78f50999a30db84270f647af6
path is /nix/store/b0z5c3m25jd60rhdyqdqr8vwjcy3q4gj-go-9831f2c
git human-readable version is v1.1
Commit date is 2018-01-12 09:19:27 -0500
hash is 0qxdq599sjwb03znlxy634mdnmfl90770wf1kk37dhzll6i84vkr
{
"url": "https://github.com/ugorji/go",
"rev": "9831f2c3ac1068a78f50999a30db84270f647af6",
"date": "2018-01-12T09:19:27-05:00",
"sha256": "0qxdq599sjwb03znlxy634mdnmfl90770wf1kk37dhzll6i84vkr",
"fetchSubmodules": true
}
您关于散列是冗余的假设是正确的。由于 git 使用 content-addressable 存储,我们可以保证您检索的数据与提交哈希匹配。 fetchgit
.
需要这样做只是出于 nix-specific 技术原因
现在 nix 2.0 has been released the function builtins.fetchGit
is built-in into nix, instead of specified via a nixpkgs derivation,就像 fetchgit
一样。
因此,一旦升级到 nix 2.0,就不再需要指定 sha256
哈希。
NB:令人惊讶的是,这还包括仅指定分支或标签而不是提交哈希的不纯情况。当您的用例不需要可重复性,但您更希望某个分支的最新提交时,可以使用此方法。
但是,您不必担心失去宝贵的再现性,因为有 pure-mode,需要修改。
问题
当 nix-prefetch-git
与 --rev
一起使用时,我们真的还需要 sha256 吗?
假设
我理解将 git
与 tags
一起使用时的这一要求,因为标签可以重新附加到不同的版本。
所以我目前的理论是,我们不信任 git 通过传递额外的 sha256 哈希来获取或处理文件的方式。遵循这一概念,我们可以以一种 git
永远无法影响的方式计算哈希值。
正确吗?
nix-prefetch-git 示例
nix-prefetch-git https://github.com/ugorji/go --rev 9831f2c3ac1068a78f50
Leeres Git-Repository in /tmp/git-checkout-tmp-bPibjanm/go-9831f2c/.git/ initialisiert
remote: Counting objects: 2220, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 2220 (delta 4), reused 5 (delta 2), pack-reused 2208
Empfange Objekte: 100% (2220/2220), 2.39 MiB | 2.86 MiB/s, Fertig.
Löse Unterschiede auf: 100% (1706/1706), Fertig.
Von https://github.com/ugorji/go
* [neuer Branch] master -> origin/master
* [neues Tag] v.1.1-beta -> v.1.1-beta
* [neues Tag] v1.1 -> v1.1
Zu neuem Branch 'fetchgit' gewechselt
removing `.git'...
git revision is 9831f2c3ac1068a78f50999a30db84270f647af6
path is /nix/store/b0z5c3m25jd60rhdyqdqr8vwjcy3q4gj-go-9831f2c
git human-readable version is v1.1
Commit date is 2018-01-12 09:19:27 -0500
hash is 0qxdq599sjwb03znlxy634mdnmfl90770wf1kk37dhzll6i84vkr
{
"url": "https://github.com/ugorji/go",
"rev": "9831f2c3ac1068a78f50999a30db84270f647af6",
"date": "2018-01-12T09:19:27-05:00",
"sha256": "0qxdq599sjwb03znlxy634mdnmfl90770wf1kk37dhzll6i84vkr",
"fetchSubmodules": true
}
您关于散列是冗余的假设是正确的。由于 git 使用 content-addressable 存储,我们可以保证您检索的数据与提交哈希匹配。 fetchgit
.
现在 nix 2.0 has been released the function builtins.fetchGit
is built-in into nix, instead of specified via a nixpkgs derivation,就像 fetchgit
一样。
因此,一旦升级到 nix 2.0,就不再需要指定 sha256
哈希。
NB:令人惊讶的是,这还包括仅指定分支或标签而不是提交哈希的不纯情况。当您的用例不需要可重复性,但您更希望某个分支的最新提交时,可以使用此方法。 但是,您不必担心失去宝贵的再现性,因为有 pure-mode,需要修改。