我正在尝试在 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
在这里工作得怎么样?
我认为差异不会发生在这里。我还认为您已经正确理解了这个函数的作用:它获取磁盘上文件的文件 URI,并找到 git repo 的相应 URI。然后它有 2 个资源可供比较。
然后将这 2 个资源传递给内置差异功能。
让我们跟踪1.12.1中的代码(逐一跟踪链接):