2017-05-08 141 views
7

我試圖在vscode中創建一個版本控制擴展。我試圖看看vscode中的git實現。令人困惑的部分是文件差異。在git擴展源代碼中,爲了查看文件更改,使用了vscode.diff。爲了得到原始文件的uri,新的uri是通過更改修改文件的urischeme而生成的。這是如何工作的?git diff如何在vscode git擴展中工作?

例如,

https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.tsgetRightResource方法,toGitUri被稱爲與該文件的URI。 toGitUri FPGA實現如下,

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只是改變文件的方案從filegit與查詢。然後將這個uri連同原始文件uri一起提供給vscode.diff以顯示git diff。 toGitUri如何在這裏工作?

感謝和問候,

Sathish所在V

回答

3

我覺得差異不會發生在這裏。我也認爲你已經正確理解了這個函數的作用:它爲磁盤上的文件獲取文件URI併爲git repo找到相應的URI。然後它有2個資源進行比較。

然後將這2個資源傳遞給內置的差異功能。

讓我們跟蹤1.12.1代碼(按照鏈接逐一):

  • vscode.diff註冊here

  • delegates_workbench.diff

  • ,一個是註冊heredelegates以編輯器的內置差異...

  • ...像這樣:editorService.openEditor({ leftResource, rightResource, ...) ...

  • ...其中leftResource是在磁盤和rightResource文件URI在混帳回購協議文件。