如何在 Visual Studio 代码中访问 git 的 api

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何在 Visual Studio 代码中访问 git 的 api的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中使用 g++ 编译器

如何通过访问数据库在visual studio c#中验证注销一次

如何在 Visual Studio 代码扩展中打开浏览器窗口?

在 Visual Studio 或 g++ 上运行 Matlab Coder 输出项目

从 Visual Studio 2010 (VB.NET) 读取访问查询

为啥 g++ 和 MS Visual Studio C++ 执行以下代码的方式不同?