如何判断文件是否受Git管控并获取GitHub仓库URL?VS Code扩展API问询
查看文件是否受Git管控及获取GitHub仓库URL
一、本地命令行方式
如果你只是在本地环境操作,用Git命令就能搞定:
- 判断文件/文件夹是否受Git管控
运行git rev-parse --is-inside-work-tree,如果输出true,说明当前路径(或目标路径)在Git仓库工作区内;也可以用git status --porcelain <目标路径>,如果命令返回0(即使没有输出,也代表该路径属于Git仓库且无未追踪/修改内容),就说明受管控。 - 获取关联的GitHub仓库URL
进入仓库根目录后,运行git config --get remote.origin.url,输出的就是远程仓库的地址,GitHub的地址一般是https://github.com/<用户名>/<仓库名>.git或git@github.com:<用户名>/<仓库名>.git格式。
二、VS Code扩展开发API
如果是开发VS Code自定义扩展,可借助内置的Git扩展API实现:
- 首先确保你的扩展依赖
vscode.git扩展,在package.json的extensionDependencies里添加它:"extensionDependencies": ["vscode.git"] - 判断文件/文件夹是否受Git管控
通过以下代码获取Git扩展实例,并检查目标路径对应的仓库是否存在:import * as vscode from 'vscode'; async function isPathUnderGitControl(uri: vscode.Uri): Promise<boolean> { const gitExtension = vscode.extensions.getExtension('vscode.git')?.exports; if (!gitExtension) { return false; } const api = await gitExtension.getAPI(1); const repo = api.getRepository(uri); return repo !== undefined; } - 获取关联的远程仓库URL
拿到仓库对象后,从远程列表中提取origin的URL:
注意:返回的URL可能是SSH或HTTPS格式,你可以根据需求转换为浏览器可访问的GitHub页面地址(比如把async function getGitHubRepoUrl(uri: vscode.Uri): Promise<string | undefined> { const gitExtension = vscode.extensions.getExtension('vscode.git')?.exports; if (!gitExtension) { return undefined; } const api = await gitExtension.getAPI(1); const repo = api.getRepository(uri); return repo?.state.remotes.find(remote => remote.name === 'origin')?.url; }git@github.com:user/repo.git替换成https://github.com/user/repo)。
内容的提问来源于stack exchange,提问作者GabeV
相关产品推荐
相关产品推荐

