运行 git 来自 Node 的 API

Running git blame from Node's API

我正在构建一个 VS Code 扩展,它作为过程的一部分运行 git blame。

我读到我可以使用 Node 的 API 从 JavaScript 执行命令行命令,使用 child process 像这样:

var exec = require('child_process').exec;

        exec(`ls`
        function (error, stdout, stderr) {
            console.log('stdout: ' + stdout);
            console.log('stderr: ' + stderr);
            if (error !== null) {
                 console.log('exec error: ' + error);
            }
        });

运行 这个非常简单的 ls 命令确实会在控制台中打印出目录。

但是,当我用 exec(git blame -L ${startLine},${endLine} extension.ts 替换 exec(ls 时,它说我不在 git 存储库中。请注意执行 git blame 命令从我的实际终端确实有效。

我也尝试 运行 使用 sudo 命令。它抛出错误

sudo:需要终端读取密码;使用 -S 选项从标准输入读取或配置 askpass 助手 sudo: 需要密码

/private/var/folders/th/40j77cv1587_zndgl34g0m100000gn/T/AppTranslocation/C0CFF9C7-F5C7-4C37-B7BD-1990096D4E41/d/Visual工作室代码.app/Contents/Resources/app/out/bootstrap-fork.js:5

我该怎么做才能让它发挥作用?

原来 Node 的子进程是 运行 根目录的命令,而不是工作目录。

由于我正在开发 VS Code 扩展,var currentlyOpenTabfilePath = vscode.window.activeTextEditor?.document.uri.fsPath; 解决了它。

值得一提的是,我尝试了不同的方法,但均无效。它们是: