Github 存储库的校验和

Checksum for Github Repository

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

我尝试使用存储库的 tarball 计算校验和,但是 运行 由于文件之间的时间戳不同而遇到了麻烦,这些文件在其他方面是相同的。

这是为可能需要的其他人提供的解决方案。

它根据最新提交的树中对象的哈希值创建一个哈希值。

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>';
  }
<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>