Git diff 在 Visual Studio Code Git 扩展中如何工作?

问题描述 投票:0回答:1

我正在尝试在 Visual Studio Code 中创建版本控制扩展。我尝试查看 Visual Studio Code 中的 Git 实现。令人困惑的部分是文件差异。在 Git 扩展源代码中,为了查看文件更改,使用

vscode.diff
。要获取原始文件的 URI,通过更改修改文件的 URI 的
scheme
来生成新的 URI。这是如何运作的?

例如,在 https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.ts 中,

getRightResource
方法中,使用文件的 URI 调用
toGitUri
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
在这里工作得怎么样?

version-control visual-studio-code vscode-extensions
1个回答
6
投票

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

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

让我们跟踪1.12.1中的代码(逐一跟踪链接):

  • vscode.diff
    已注册这里

  • 委托给

    _workbench.diff

  • 那个已在here注册并代表编辑器的内置差异...

  • ...像这样:

    editorService.openEditor({ leftResource, rightResource, ...)
    ...

  • ...其中
    leftResource
    是磁盘上的文件,
    rightResource
    是 git 存储库中文件的 URI。
© www.soinside.com 2019 - 2024. All rights reserved.