gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:01:15 24 4
gpt4 key购买 nike

我正在尝试在 vscode 中创建版本控制扩展。我尝试查看 vscode 中的 Git 实现。令人困惑的部分是文件差异。在 git 扩展源代码中,为了查看文件更改,使用了 vscode.diff。要获取原始文件的 uri,通过更改修改文件的 urischeme 来生成新的 uri >。这是如何运作的?

例如,在https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.ts中, getRightResource 方法,使用文件的 uri 调用 toGitUritoGitUri 实现如下,

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中的代码(逐一点击链接):

  • vscode.diff 已注册 here

  • delegates_workbench.diff

  • 该已注册 heredelegates到编辑器的内置差异...

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

  • ... 其中 leftResource 是磁盘上的文件,rightResource 是 git 存储库中文件的 URI。

关于version-control - Git diff 在 vscode Git 扩展中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com