nix-prefetch-git sha256要求,在标签上使用修订

qkn*_*ght 0 git nix nixpkgs

nix-prefetch-git与a一起使用时--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
}
Run Code Online (Sandbox Code Playgroud)

kne*_*epp 5

您认为哈希是多余的假设是正确的。由于git使用内容可寻址存储,因此我们保证您检索的数据与提交哈希匹配。仅有Nix特定的技术原因需要使用fetchgit

现在已经发布nix 2.0,该函数builtins.fetchGit内置在 nix中,而不是像以前那样通过nixpkgs派生指定fetchgit

因此,一旦升级到nix 2.0,就不再需要指定sha256哈希。

注意:令人惊讶的是,当仅指定分支或标记而不是提交哈希时,这还包括不纯的情况。当您的用例不需要可重复性,而是您想要某个分支的最新提交时,可以使用此方法。但是,您不必担心会失去宝贵的可重复性,因为存在纯模式,需要进行修改。