校验和Github存储库

时间:2015-07-06 07:52:57

标签: repository checksum

如何计算Github存储库内容的校验和,以便具有不同历史但内容相同的两个存储库产生相同的校验和?

我尝试使用存储库的tarball计算校验和,但由于文件之间的时间戳不同而遇到了麻烦,否则它们是相同的。

1 个答案:

答案 0 :(得分:0)

这是其他任何可能需要的人的解决方案。

它从最新提交树的对象哈希中创建哈希。



console = { log: log };

// construct hash of a github repository

function getRepoHash(login, repo, cb) {
    
  // get latest commit
  ghapi('getRepoCommits', login, repo, { per_page: 1 }, function (err, res, commits) {
      
      // get tree of last commit
      ghapi('getRepoGitTree', login, repo, commits[0].sha, function (err, res, body) {
          
          // construct an array of shas from tree
          var shas = body.tree.map(function (obj) {
            return obj.sha;
          });
          
          // hash the shas
          var repoSha = sha1(shas.toString()).toString();
          cb(null, repoSha);
      })
  })
}

// nodejs/io.js vs joyent/node

getRepoHash('nodejs', 'io.js', function (err, sha1) {
  getRepoHash('joyent', 'node', function (err, sha2) {
    var equal = sha1 === sha2;
    console.log('nodejs/io.js '+ sha1)
    console.log('joyent/node '+ sha2)
    console.log('equal? '+ equal)
  });
});

// logging
function log(message) {
      var logger = document.getElementById('log');
      logger.innerHTML += message + '<br>';
  }
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha1/0.3.0/sha1.min.js"></script>
<script src="https://wzrd.in/standalone/ghapi@latest"></script>
<div id="log"></div>
&#13;
&#13;
&#13;