Nodegit - 在两次提交之间获得差异

时间:2016-01-06 12:47:18

标签: javascript node.js git nodegit

我的回购中有两个分支a = [5 5; 5 5] master

假设我当前的分支是master.min

我的主分支处于提交 - master.min

主分支发生了一些推动 - abcdefgh

我存储了我的主分支的当前提交:

ijkl

由于分支之间的切换时间很长,我需要完成 repo.getBranchCommit("master") .then(function(commit) { startCommit = commit; })

上的所有操作

所以,我做了一个获取:

master.min

现在,我需要获取在repo.fetch("master"); &之间添加,修改或删除的所有文件的列表。 abcd

ijkl

2 个答案:

答案 0 :(得分:2)

我也需要这个,但似乎nodegit还不支持。

看一下https://github.com/nodegit/nodegit/blob/master/lib/commit.js#L196我看到diff是通过比较提交树和父树来计算的:

return thisTree.diffWithOptions(parentTree, options)

所以,我认为这可以通过实现commit#getDiff的变体来实现,该变体接收另一个提交的OID并调用tree1 = this.getTree()tree2 = getTheOtherCommit(OID).getTree(),然后调用tree1.diffWithOptions(tree2, options) }。

当然getTheOtherCommit是伪代码,但它只是想象一下。

我会尽快实施并在此处发布进度。

答案 1 :(得分:0)

对于那些寻求更清晰答案的人:

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文档: