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

Sat*_*h V 7 version-control visual-studio-code vscode-extensions

我正在尝试在vscode中创建版本控制扩展.我试着在vscode中查看Git实现.令人困惑的部分是文件差异.在git扩展源代码中,用于查看文件更改vscode.diff.要获取uri原始文件,uri可以通过更改scheme修改后的文件来生成新文件uri.这是怎么回事?

例如,在https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.ts中,使用文件的uri调用getRightResource方法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
        })
    });
}
Run Code Online (Sandbox Code Playgroud)

在这里,toGitUri只是改变文件的方案,从filegit与查询.这uri随后被提供给vscode.diff与原沿uri文件,以显示git的差异.怎么在toGitUri这里工作?

Hug*_* M. 5

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

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

我们跟踪一下1.12.1中的代码(一个链接):

  • vscode.diff在这里注册

  • 委托_workbench.diff

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

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

  • ...leftResource磁盘上的文件在哪里,是rightResourcegit repo中文件的URI。