如何在 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 功能(如checkout
、branch
等)而不是使用 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 c#中验证注销一次
如何在 Visual Studio 代码扩展中打开浏览器窗口?
在 Visual Studio 或 g++ 上运行 Matlab Coder 输出项目