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。 