Nodegit-获取两次提交之间的差异
Nodegit - get diff between two commits
我的repo中有两个分支master
和master.min
。
假设我当前的分支是master.min
。
我的主分支处于提交状态-abcd
主分支发生一些推送-efgh
、ijkl
我存储主分支的当前提交:
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.
对于那些寻找更明确答案的人:
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文档:
- 方便的补丁:https://www.nodegit.org/api/convenient_patch/
- 差异文件:https://www.nodegit.org/api/#DiffFile
- 所有API文件:https://www.nodegit.org/api/
我也需要这个,但nodegit似乎还不支持它。
看一看https://github.com/nodegit/nodegit/blob/master/lib/commit.js#L196我看到差异是通过比较提交树和父树来计算的:
return thisTree.diffWithOptions(parentTree, options)
因此,我认为这可以通过实现commit#getDiff
的变体来实现,该变体接收另一个提交的OID并调用tree1 = this.getTree()
和tree2 = getTheOtherCommit(OID).getTree()
,然后调用tree1.diffWithOptions(tree2, options)
。
当然,getTheOtherCommit
是伪代码,但它只是为了描绘这个想法。
我会尽快实施它,并在这里发布进展。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- Javascript生成的表单未提交
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- HTML表单提交时未执行外部函数
- 在POST中将html表作为csv提交
- 在我的Javascript和HTML之间的表单提交按钮链接中遇到问题
- 无法在提交之间清空数组
- AJAX 调用和表单提交之间的延迟
- 提交之间的差异=“;return false”;并且onsubmit=“;javascript:return false
- JavaScript表单提交和包含提交按钮的表单之间的区别
- PHP或Javascript-如何设置表单提交之间的最短时间
- Nodegit-获取两次提交之间的差异
- Jquery移动表单数据在单个文件中的两个页面之间提交
- 表单之间不同.请使用方法提交
- 两种提交表格方法之间的差异
- 用JavaScript将事件侦听器绑定到特定日期和时间之间的提交表单
- 在提交表格前计算并显示2个日期之间的差异
- 如何在启用和禁用表单提交之间切换