git diff如何在vscode git扩展中工作?

我试图在vscode中创建一个版本控制扩展。 我试图看看vscode中的git实现。 令人困惑的部分是文件差异。 在git扩展源代码中,为了查看文件更改,使用了vscode.diff 。 为了得到uri原始文件,新的uri是通过改变所产生的scheme修改后的文件的的uri 。 这是如何工作的?

例如,

在https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.ts, getRightResource方法, toGitUri被调用的文件的URI。 toGitUri实现如下,

export function toGitUri(uri: Uri, ref: string, replaceFileExtension = false): Uri {
    return uri.with({
        scheme: 'git',
        path: replaceFileExtension ? `${uri.path}.git` : uri.path,
        query: JSON.stringify({
            path: uri.fsPath,
            ref
        })
    });
}

这里, toGitUri只是将文件的方案从file更改为与查询git 。 然后将这个uri与原始文件uri一起提供给vscode.diff以显示git diff。 toGitUri在这里工作如何?

感谢致敬,

Sathish V


我认为差异不会发生在这里。 我也认为你已经正确理解了这个函数的作用:它为磁盘上的文件获取一个文件URI,并为git repo找到相应的URI。 然后它有2个资源进行比较。

这2个资源然后传递给内置的差异功能。

让我们跟踪1.12.1中的代码(点击链接):

  • vscode.diff在这里注册

  • 它委托给_workbench.diff

  • 那个在这里注册并委托编辑的内置差异...

  • ...像这样: editorService.openEditor({ leftResource, rightResource, ...) ...

  • ...其中, leftResource是磁盘上的文件, rightResource是git repo中文件的URI。
  • 链接地址: http://www.djcxy.com/p/39395.html

    上一篇: how git diff works in vscode git extension?

    下一篇: Change a variable in the current sbt task scope