【问题标题】:How to access the api for git in visual studio code如何在 Visual Studio 代码中访问 git 的 api
【发布时间】:2018-03-12 16:52:22
【问题描述】:

我想在我的一个扩展中使用 vscode git api 来执行 git clone 和其他任务。它可以从 vscode api 访问吗? 代码在这里..api

【问题讨论】:

  • 我也有同样的疑惑……在docs 中,关于 git api 只有两个 (2!) 项。当我查看我经常使用的两个 Git 扩展(gitHistoryVSCodevscode-gitlens)的代码时,我注意到作者从头开始编写基本的 git 功能(如 checkoutbranch 等)而不是使用 VSCode 中一些已经内置的 git 功能。
  • 这里也一样,显然没有这方面的消息。回购中的这个开放问题似乎试图使扩展的 API 可用:github.com/Microsoft/vscode/issues/31103

标签: visual-studio-code vscode-extensions


【解决方案1】:

推特来救援! 我在那里问过,并指出了这里的 API 定义:https://github.com/Microsoft/vscode/blob/master/extensions/git/src/api/git.d.ts

...这里有一个例子:https://github.com/Microsoft/vscode-pull-request-github/blob/master/src/extension.ts#L53

// Import the git.d.ts file
import { API as GitAPI, GitExtension, APIState } from './typings/git'; 

const gitExtension = vscode.extensions.getExtension<GitExtension>('vscode.git').exports;
const api = gitExtension.getAPI(1);

const rootPath = vscode.workspace.rootPath;
const repository = api.repositories.filter(r => isDescendant(r.rootUri.fsPath, rootPath))[0];

【讨论】:

  • 导入GitExtension的导入行是什么?
  • 你能澄清一下这段代码吗?这很令人困惑,但是,我尝试了但无济于事......
【解决方案2】:

在 vscode 扩展中使用 git api 的示例代码:

const gitExtension = vscode.extensions.getExtension('vscode.git').exports;
const api = gitExtension.getAPI(1);

const repo = api.repositories[0];
const head = repo.state.HEAD;

// Get the branch and commit 
const {commit,name: branch} = head;

// Get head of any other branch
const mainBranch = 'master'
const branchDetails = await repo.getBranch(mainBranch);

// Get last merge commit
const lastMergeCommit = await repo.getMergeBase(branch, mainBranch);

const status = await repo.status();

console.log({ branch, commit, lastMergeCommit, needsSync: lastMergeCommit !== commit });

您还必须更新 package.json 中的 extensionDependencies:

"extensionDependencies": [
    "vscode.git"
  ]

【讨论】:

  • 仅供参考,我决定使用 simple-git npm 模块而不是依赖 git 扩展。
【解决方案3】:

根据the extension API,访问其他扩展提供的API:

当依赖于另一个扩展的 API 添加一个 extensionDependencies-进入package.json,并使用 getExtension-function 和 exports-property,如下所示:

let mathExt = extensions.getExtension('genius.math');
let importedApi = mathExt.exports;

console.log(importedApi.mul(42, 1));

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2023-03-24
    • 2018-05-30
    相关资源
    最近更新 更多