【VS Code插件开发】自定义指令实现 git 命令 (九)

这篇具有很好参考价值的文章主要介绍了【VS Code插件开发】自定义指令实现 git 命令 (九)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐱 个人主页:不叫猫先生,公众号:前端舵手
🙋‍♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀!
✨优质专栏:VS Code插件开发极速入门
📢 资料领取:前端进阶资料可以找我免费领取

【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令

我们通常会通过小乌龟、SourceTree、终端等实现 git 的相关操作,VS Code 开发工具也提供了 git 相关的操作 ,那么在VS Code中如何通过自定义命令实现 git 的相关操作?本文主要介绍了git clonegit addgit commitgit push等命令的实现。

创建终端

  1. 异步函数声明:

    async function executeGitCommand(command, options) {
    

    用于执行 Git 命令。command 参数表示要执行的 Git 命令字符串,options 参数是一个对象,包含了执行命令的选项。

  2. 检查终端是否存在:

    if (!terminal){
        terminal = vscode.window.createTerminal(terminalOptions);
    }
    

    检查全局变量 terminal 是否存在,如果不存在则创建一个新的终端。vscode.window.createTerminal 方法用于创建一个终端,terminalOptions 可能是在代码的其他地方定义的终端选项。

  3. 获取终端进程 ID:

    const pid = await terminal.processId;
    

    使用 await 关键字获取终端的进程 ID。这样可以在需要时使用进程 ID 进行其他操作,例如监控或结束进程。

  4. 发送 Git 命令到终端:

    terminal.sendText(command);
    

    使用 terminal.sendText 方法将 Git 命令发送到终端。这使得可以通过代码自动执行一系列 Git 命令。

  5. 显示终端:

    terminal.show();
    

    最后,使用 terminal.show 方法显示终端。这确保用户可以看到终端中执行的命令输出。

总体而言,这个函数的作用是在 VSCode 中执行 Git 命令,并通过终端显示命令的执行结果。该函数假设 terminal 是一个在全局范围内定义的终端变量,并在需要时创建。

async function executeGitCommand(command, options) {
    if (!terminal){
        terminal = vscode.window.createTerminal(terminalOptions);
    }
    const pid = await terminal.processId;
    terminal.sendText(command);
    terminal.show();
}

创建终端的命令再后续执行git命令时需要用到。

git add .

注册gitAdd命令

async function activate(context) {
    vscode.commands.registerCommand('wxRead.gitAdd', () => {
        executeGitCommand('git add .', { name: 'Git Add' });
    })
}

command + shift +p 之后选择gitAdd

【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令
之后控制台就会出现下图:
【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令

git commit

  1. 命令注册:
    vscode.commands.registerCommand('wxRead.gitCommit', async () => {
    

使用 registerCommand 方法注册一个名为 'wxRead.gitCommit' 的命令。当用户执行这个命令时,将触发后面的回调函数。

  1. 创建输入框:

    const defaultCommitMessage = "Your default commit message here";
    const input = await vscode.window.createInputBox();
    input.prompt = "Enter your commit message";
    input.value = defaultCommitMessage;
    input.show();
    

    创建一个输入框,用于用户输入提交消息。设置输入框的提示信息为 "Enter your commit message",并将默认值设置为 "Your default commit message here"。最后,通过 input.show() 显示输入框。
    【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令

  2. 监听输入框的 Accept 事件:

    input.onDidAccept(() => {
    

    使用 onDidAccept 事件监听器,当用户按下确认键(Enter)时触发。

  3. 获取提交消息:

    const commitMessage = input.value;
    

    获取用户在输入框中输入的提交消息。

  4. 销毁输入框:

    input.dispose();
    

    在获取提交消息后,销毁输入框,以避免占用资源。

  5. 执行 Git Commit 命令:

    if (commitMessage) {
        const commitCommand = `git commit -m "${commitMessage}"`;
        executeGitCommand(commitCommand, { name: 'Git Commit' });
    }
    

    检查用户是否输入了提交消息,如果有则构建 git commit 命令,并调用 executeGitCommand 函数执行该命令。传递的第二个参数是一个对象,包含了执行命令的名称,这里设置为 'Git Commit'

完整代码如下:

vscode.commands.registerCommand('wxRead.gitCommit', async () => {
        const defaultCommitMessage = "Your default commit message here";
        const input = await vscode.window.createInputBox();
        input.prompt = "Enter your commit message";
        input.value = defaultCommitMessage;
        input.show();
        input.onDidAccept(() => {
            const commitMessage = input.value;
            input.dispose();
            if (commitMessage) {
                const commitCommand = `git commit -m "${commitMessage}"`;
                executeGitCommand(commitCommand, { name: 'Git Commit' });
            }
        });
    })

git clone

  1. 注册gitClone命令后,在扩展程序中 command + shift +p (我是mac)之后选择wxRead.gitClone
    【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令

  2. 弹出输入框获取 Git 仓库 URL

    vscode.window.showInputBox({ prompt: 'Enter Git repository URL' }).then((gitRepoUrl) => {
    

    这一部分代码使用 showInputBox 方法弹出一个输入框,提示用户输入 Git 仓库的 URL。一旦用户输入完成,该输入的内容将作为参数传递给 then 函数中的回调函数,并存储在 gitRepoUrl 变量中。这里输入我的开源项目:https://github.com/zbsguilai/kedaxunfei.git
    【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令

  3. 随后会出现一个弹框,会让你选择一个文件作为项目的目录

  4. 显示进度条并执行克隆操作:

    vscode.window.withProgress({
        location: vscode.ProgressLocation.Notification,
        title: 'Cloning Git Repository',
        cancellable: false
    }, async (progress, token) => {
    

    使用 withProgress 方法显示一个进度条,该进度条位于通知区域,标题为 ‘Cloning Git Repository’。这个进度条将在克隆操作期间显示。async (progress, token) => {...} 是一个异步函数,用于处理进度和取消操作。

  5. 检查 Git 仓库 URL 是否存在:

    if (gitRepoUrl) {
    

    确保用户提供了有效的 Git 仓库 URL。

  6. 弹出文件夹选择框:

    vscode.window.showOpenDialog({
        canSelectFolders: true,
        canSelectFiles: false,
        openLabel: 'Select Destination Folder'
    }).then((folders) => {
    

    使用 showOpenDialog 方法弹出一个文件夹选择框,允许用户选择目标文件夹。选定的文件夹将在 folders 变量中。

  7. 执行 Git Clone 操作:

    const gitCloneProcess = spawn('git', ['clone', gitRepoUrl, cloneDirectory]);
    

    使用 Node.js 的 spawn 方法创建一个子进程,执行 git clone 命令。gitRepoUrl 是用户输入的 Git 仓库 URL,cloneDirectory 是用户选择的目标文件夹。

  8. 处理 Git 命令输出:

    gitCloneProcess.stdout.on('data', (data) => {
        console.log(data.toString());
    });
    gitCloneProcess.stderr.on('data', (data) => {
        console.error(data.toString());
    });
    

    将 Git 命令的标准输出和标准错误输出打印到控制台,以便在调试时查看执行的详细信息。

  9. 处理 Git Clone 完成事件:

    gitCloneProcess.on('close', (code) => {
        console.log('Git clone process exited with code:', code);
        if (code === 0) {
            vscode.window.showInformationMessage('Git clone completed successfully.');
        } else {
            vscode.window.showErrorMessage('Git clone failed. Please check the URL and try again.');
        }
    });
    

    当 Git Clone 进程完成时,检查其退出码。如果退出码为 0,显示成功消息;否则,显示错误消息。

完整代码如下:

 vscode.commands.registerCommand('wxRead.gitClone', () => {
        // 弹出输入框以获取用户提供的 Git 仓库 URL
        vscode.window.showInputBox({ prompt: 'Enter Git repository URL' }).then((gitRepoUrl) => {
            vscode.window.withProgress({
                location: vscode.ProgressLocation.Notification,
                title: 'Cloning Git Repository',
                cancellable: false
            }, async (progress, token) => {
                if (gitRepoUrl) {
                    if (gitRepoUrl) {
                        // 使用 QuickPick 来让用户选择目标文件夹
                        vscode.window.showOpenDialog({
                            canSelectFolders: true,
                            canSelectFiles: false,
                            openLabel: 'Select Destination Folder'
                        }).then((folders) => {
                            if (folders && folders[0]) {
                                const cloneDirectory = folders[0].fsPath;
                                // 执行 git clone 命令,将代码克隆到选定的目录
                                const gitCloneProcess = spawn('git', ['clone', gitRepoUrl, cloneDirectory]);
                                // 处理 Git 命令的输出
                                gitCloneProcess.stdout.on('data', (data) => {
                                    console.log(data.toString());
                                });
                                gitCloneProcess.stderr.on('data', (data) => {
                                    console.error(data.toString());
                                });
                                gitCloneProcess.on('close', (code) => {
                                    console.log('Git clone process exited with code:', code); // 添加这行用于调试
                                    if (code === 0) {
                                        vscode.window.showInformationMessage('Git clone completed successfully.');
                                    }
                                    else {
                                        vscode.window.showErrorMessage('Git clone failed. Please check the URL and try again.');
                                    }
                                });
                            }
                        });
                    }
                }
            });
        });
    }));

git push

注册wxRead.gitPush命令,在扩展程序中 command + shift +p (我是mac)之后选择wxRead.gitPush

 vscode.commands.registerCommand('wxRead.gitPush', () => {
        executeGitCommand('git push', { name: 'Git Push' });
    })

好书推荐

TypeScript+React Web应用开发实战 :京东直达

本书适应于当今前端开发的流行趋势,注重理论与实战相结合的思想,配合大量的、基础且实用的代码实例,帮助读者学习基于TypeScript语言规范的React框架开发的相关知识。全书内容通俗易懂、覆盖面广、充分翔实、重点突出,涵盖了TypeScript语言规范和React框架开发的方方面面。

全书内容共10章,TypeScript语言部分包括TypeScript语言基础与开发环境的搭建、TypeScript项目开发与配置、TypeScript语法规范和TypeScript语法高级特性等方面的内容;React框架部分包括React框架基础与开发环境的搭建,React语法、组件、状态与生命周期,React框架高级指引和React Hook新特性等方面的内容。同时,为了突出本书项目实战的特点,针对性地开发了两个Web项目应用,以帮助读者深入学习基于TypeScript + React技术的开发流程。

本书是学习基于TypeScript + React技术开发的实战图书,全书内容简明、代码精练、实例丰富。希望本书的内容能够帮助前端开发的初学者快速入门,尽快提高Web应用程序开发的技术水平。

【VS Code插件开发】自定义指令实现 git 命令 (九),git,vscode,插件,自定义指令文章来源地址https://www.toymoban.com/news/detail-839649.html

到了这里,关于【VS Code插件开发】自定义指令实现 git 命令 (九)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MCUXpresso for VS Code -- 基于VSCode开发RT1176

    MCUXpresso for VS Code -- 基于VSCode开发RT1176

    MCUXpresso for VS Code 是nxp推出插件,旗下MCX LPC, Kinetis和i.MX rt等MCU,都能在VS Code平台进行嵌入式开发。功能框图如下: 前期准备: 软件环境: CMake下载地址 Download | CMake Ninja下载地址 Ninja, a small build system with a focus on speed (ninja-build.org) MCUXpresso IDE 下载地址 MCUXpresso IDE 解压安装后

    2024年02月14日
    浏览(12)
  • VS Code开发插件使用 pnpm 打包异常的解决姿势

    VS Code开发插件使用 pnpm 打包异常的解决姿势

    刚刚准备发一个插件,发现用 pnpm 打出一个本地插件包直接扑街了。 这里只聚焦错误问题的解决,不是发插件的教程。。 聊点背景信息,vscode 的插件命令行的是 vsce 这个模块提供的 cli 能力去做的 pnpm : 8.x 本地打包的命令: vsce package version -m \\\"message\\\" vsce package --help 可以看到

    2024年04月10日
    浏览(20)
  • Visual Studio Code 常见的配置、常用好用插件以及【vsCode 开发相应项目推荐安装的插件】

    把插件的更新也一起取消了 字体对开发也很重要,不同字体,字母形态都不太一样,尤其是标点符号,逗号和分号的区分,有的字体看着这两者就很像 这样打开了很多个文件,就不会导致有的打开的文件被隐藏 相当于idea 查看当前类或接口的结构 Structure 支持快捷键与鼠标右

    2023年04月16日
    浏览(36)
  • Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)

    Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)

    最近收到了一个 Tang nano 9K FPGA开发板,就想借此机会研究一下。 官方文档里介绍如果想使用高云的 FPGA,就需要使用 GOWIN IDE,但是需要申请 license 提交一堆资料,我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学习和投入生产,因为 IDE 忽略了很多细节,以及

    2024年02月12日
    浏览(48)
  • C/C++开发,关闭vscode中的插件git工具

    C/C++开发,关闭vscode中的插件git工具

    安装git后,有git配置的路径,vscode会通过git进行检测。关闭vscode中的插件git工具方法如下:

    2024年02月11日
    浏览(7)
  • VS Code好用的插件

    VS Code好用的插件

    VS Code是一个免费且开源的跨平台文本编辑器,由Microsoft开发和维护。它的主要优点和缺点如下: 优点: 跨平台支持:VS Code支持Windows、Linux和Mac OS等多个操作系统,使得它成为一个非常方便的跨平台文本编辑器。 功能强大:VS Code支持代码补全、语法高亮、代码片段、调试器

    2023年04月09日
    浏览(11)
  • 在无公网IP环境下实现VS Code远程开发的方法

    在无公网IP环境下实现VS Code远程开发的方法

    哈喽大家好,我是咕噜美乐蒂,很高兴又见面啦! 随着云计算和远程协作的普及,越来越多的开发者选择使用VS Code进行远程开发。然而,有时我们会发现自己处于一个没有公网IP的网络环境,这可能会导致无法直接访问VS Code的远程开发功能。在本文中,我们将探讨一些解决

    2024年01月24日
    浏览(14)
  • VS code更改插件安装位置

    VS code更改插件安装位置

    VS code插件位置默认安装在C盘用户目录下,随着安装插件的数量增加,占用用C盘内存较大,我选择将插件移动到D盘。我之前使用过利用mklink来创建目录符号链接这种方式,但没有成功,于是就放弃了。我的步骤分两步: (极力推荐第3种方式) 将用户目录下的插件剪切到D盘

    2024年02月01日
    浏览(26)
  • 12.(开发工具篇vscode+git)vscode 不能识别npm命令

    12.(开发工具篇vscode+git)vscode 不能识别npm命令

    问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restricted,表示状态是禁止的; (3)这时执行set-ExecutionPolicy RemoteSigned; (4)此时再执行get-ExecutionPolicy,显示RemoteSigned,则表示状态解禁,可以运行 (5)重启

    2024年02月16日
    浏览(8)
  • 一分钟解决:vscode卡在“设置SSH主机:VS Code-正在本地下载 VS Code 服务器”

    一分钟解决:vscode卡在“设置SSH主机:VS Code-正在本地下载 VS Code 服务器”

    问题:vscode之前可正常使用,更新之后,连接服务器卡住了。 解决:从CMD或者你的终端连接服务器,进入vscode-server目录下,删除一些文件夹就行,然后使用vscode重新链接,它会自动下载新的远程服务软件,替换服务器端可能损坏的文件。 步骤: 1、使用终端进入服务器 2、进

    2024年02月04日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包