使用vscode扩展在本机读取当前git分支

vuktfyat  于 2023-02-18  发布在  Git
关注(0)|答案(2)|浏览(275)

当我在为Visual Studio Code(vscode)开发一个扩展时,我问自己如何使用原生方法正确读取git refs,比如当前分支。
我目前的解决方案更像是一种变通方案:

  • 获取git路径
  • 运行git rev-parse', '--abbrev-ref', 'HEAD'
  • 以字符串形式返回标准输出并放入变量(例如master)

此处实现的完整方法(派生扩展gitHistoryVSCode)
还有其他想法吗,例如如何访问扩展/git方法或模型属性?

xesrikrc

xesrikrc1#

原生git扩展现在提供了几个方法/属性来获取当前分支以及所有分支
点击这里查看git扩展API参考:

获取分支https:github.com/microsoft/vscode/blob/master/extensions/git/src/api/api1.ts#L160
获取分支https:github.com/microsoft/vscode/blob/master/extensions/git/src/api/api1.ts#L164

2nc8po8w

2nc8po8w2#

首先,请确保按照设置说明操作。
然后,这是我想到的。

function getCurrentGitBranch(docUri: vscode.Uri): string | undefined {
  const extension = vscode.extensions.getExtension<GitExtension>("vscode.git");
  if (!extension) {
    console.warn("Git extension not available");
    return undefined;
  }
  if (!extension.isActive) {
    console.warn("Git extension not active");
    return undefined;
  }

  // "1" == "Get version 1 of the API". Version one seems to be the latest when I
  // type this.
  const git = extension.exports.getAPI(1);
  const repository = git.getRepository(docUri);
  if (!repository) {
    console.warn("No Git repository for current document", docUri);
    return undefined;
  }

  const currentBranch = repository.state.HEAD;
  if (!currentBranch) {
    console.warn("No HEAD branch for current document", docUri);
    return undefined;
  }

  const branchName = currentBranch.name;
  if (!branchName) {
    console.warn("Current branch has no name", docUri, currentBranch);
    return undefined;
  }

  return branchName;
}

相关问题