vscode扩展:调用git.使用新的分支名称创建分支,并避免使用inputBox



我正在尝试编写一个小助手扩展来简化功能分支的创建。我已经有了一个最近活动的工作项的视图和一个按钮,可以从一个特定的项目创建一个特性分支。名称已经被正确格式化,但当功能已经内置到vscode时,我不想负责分支创建逻辑。

我的第一次尝试是简单地调用executeCommand并传入命令和请求的分支名称,如下所示:

vscode.commands.executeCommand("git.branch", branchName);

遗憾的是,branchName参数只是被忽略了,并且出现了一个文本输入,就像通过命令面板执行命令时一样。简单的解决方案是简单地窃取借用分支创建逻辑或进行cli调用,但我很固执,如果可能的话,希望避免这样做。

我几乎找不到任何关于这个话题的信息。

https://code.visualstudio.com/api/references/commands不包含git命令

https://code.visualstudio.com/api/extension-guides/command#command-uris涵盖了通过uri传递参数到命令,但这也不适合我

如有任何线索,我将不胜感激。

您可以通过使用git扩展暴露的API来避免InputBox打开,参见git扩展API。

Git扩展暴露了一个API,可以被任何其他扩展访问。

复制src/api/git.d.ts到你的扩展源;

在扩展的编译中包含git.d.ts

用下面的代码片段获取API:

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

以上是@builtingit扩展描述的扩展描述。

所以你可以使用:

const branchName = 'test';
try {
const extension = vscode.extensions.getExtension('vscode.git');
if (extension !== undefined) {
const gitExtension = extension.isActive ? extension.exports : await extension.activate();
const gitAPI = gitExtension.getAPI(1);
const activeEditorUri = vscode.window.activeTextEditor.document.uri;
const wsFolderUri = vscode.workspace.getWorkspaceFolder(activeEditorUri).uri;
const theRepository = gitAPI.getRepository(wsFolderUri);
await theRepository.createBranch('test', true);
}
} catch (error) {}  // log error

似乎git.branch命令不支持参数,正如您在这里看到的

https://github.com/microsoft/vscode/blob/10e6e876822fa2da15fb68e8a6f1fb9aa8d94ce2/extensions/git/src/commands.ts L1884-L1887

在这种情况下,我建议你应该在VS Code repo中打开一个问题,并要求VS Code团队扩展命令,以支持这种情况。

他们最近增加了一个随机分支名称功能,所以我想这样的请求会很好地收到。

希望有帮助

最新更新