如何计算Github存储库内容的校验和,以便具有不同历史但内容相同的两个存储库产生相同的校验和?
我尝试使用存储库的tarball计算校验和,但由于文件之间的时间戳不同而遇到了麻烦,否则它们是相同的。
答案 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;