使用标记

时间:2018-02-22 15:09:45

标签: git nix nixpkgs

问题

nix-prefetch-git--rev一起使用时,我们真的真的需要sha256吗?

假设

我将gittags一起使用时理解这一要求,因为标签可以重新连接到不同的转速。

所以我现在的理论是我们不信任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
}

1 个答案:

答案 0 :(得分:5)

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

现在nix 2.0 has been released函数builtins.fetchGit 内置到nix中,而不是通过nixpkgs derivation指定,因为fetchgit是。sha256

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

NB :令人惊讶的是,当仅指定分支或标记而不是提交哈希时,这还包括不纯的情况。当您的用例不需要可重复性时,可以使用此方法,但您更希望获得某个分支的最新提交。 你不必害怕失去宝贵的可重复性,因为pure-mode需要修改。