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。我实现了它,它工作了。这并不是一件小事,因为有大量的承诺。