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。