Javascript Nodegit-获取两次提交之间的差异
我的回购中有两个分支Javascript Nodegit-获取两次提交之间的差异,javascript,node.js,git,nodegit,Javascript,Node.js,Git,Nodegit,我的回购中有两个分支master和master.min 假设我的当前分支是master.min 我的主分支处于提交状态-abcd 主分支出现一些推送-efgh,ijkl commit.getDiff() is not enough. I need diff between two commits. 我存储主分支的当前提交: repo.getBranchCommit("master") .then(function(commit) { startComm
master
和master.min
假设我的当前分支是master.min
我的主分支处于提交状态-abcd
主分支出现一些推送-efgh
,ijkl
commit.getDiff() is not enough. I need diff between two commits.
我存储主分支的当前提交:
repo.getBranchCommit("master")
.then(function(commit) {
startCommit = commit;
})
由于分支之间的切换时间很长,我需要执行master.min上剩余的所有操作
所以,我做了一个获取:
repo.fetch("master");
现在,我需要获得在abcd
和ijkl
之间添加、修改或删除的所有文件的列表
commit.getDiff() is not enough. I need diff between two commits.
我也需要这个,但它似乎还没有得到nodegit的支持
查看后,我发现差异是通过比较提交树和父树计算的:
return thisTree.diffWithOptions(parentTree, options)
因此,我假设这可以通过实现一个commit#getDiff
变体来实现,该变体接收另一个commit的OID并调用tree1=this.getTree()
和tree2=getTheOtherCommit(OID).getTree()
,然后调用tree1.diffWithOptions(tree2,options)
当然,getTheOtherCommit
是伪代码,但它只是为了描述这个想法
我将尽快实施该计划,并在此处公布进展情况。对于那些寻求更清晰答案的人:
const nodegit = require('nodegit');
const repo = await nodegit.Repository.open(repoDirectory);
const from = await repo.getCommit(fromCommitSHA);
const fromTree = await from.getTree();
const to = await repo.getCommit(toCommitSHA);
const toTree = await to.getTree();
const diff = await toTree.diff(fromTree);
const patches = await diff.patches();
for (const patch of patches) {
console.log(patch.newFile().path());
}
每个补丁都代表一个修改过的文件,是ConvenientPatch
的一个实例。它有两个方法oldFile()
和newFile()
,它们返回表示修改前后文件的DiffFile
实例
NodeGit API文档:
- 便捷补丁:
- DiffFile:
- 所有API文档:
我最终使用git promise wrapper for git命令来获得差异。因此,我的代码使用nodegit以及gitVery-nice方法@jotadepicas。我实现了它,它工作了。这并不是一件小事,因为有大量的承诺。