如何使用标准终端命令从节点执行git命令

时间:2017-10-17 02:51:10

标签: node.js git bash

我正在尝试使用节点脚本以编程方式将分支合并到主分支中。我尝试的第一件事是来自Execute a command line binary with Node.js,它可以很好地执行终端命令。但是我在更改工作目录时遇到了困难。我想将工作目录更改为git存储库,然后从那里运行git命令。执行cd ~/repocd /home/me/repo根本没有更改工作目录,除了使用cd之外,我找不到任何更改方法。

然后我尝试从脚本的目录执行git命令,但指向我的repo。我尝试了git --git-dirgit --work-tree,但这些命令都没有效果。错误是相同的:fatal: Not a git repository (or any of the parent directories): .git我猜这是因为运行脚本的目录不是git repo。

所以,我要么将git命令发送到我运行脚本的目录以外的目录,要么我想要一种方法来更改脚本的工作目录。优选后者。我的完整代码和输出如下:

import JiraData from './jiradata';
const jiraData = new JiraData();
const { exec } = require('child_process');

(async function () {
    const cards = await jiraData.getCardsInTest();
    let commands = ['cd /home/me/repo', 'pwd'];
    let proceeding = true;
    // for (const card of cards) {
    //     commands.push(`git merge origin/${card} --commit --no-edit`);
    // }

    for (const command of commands) {
        if (proceeding) {
            console.log(`Executing command "${command}"`);
            exec(command, (err, stdout, stderr) => {
                if (err) {
                    proceeding = false;
                    console.log(stderr);
                    return;
                }
                console.log(stdout);
            })
        }
    }
})();

输出:

> ci@1.0.0 start /home/me/CI
> babel-node index.js --presets es2015,stage-2

Executing command "cd /home/me/repo"
Executing command "pwd"
/home/me/CI

2 个答案:

答案 0 :(得分:1)

请改为使用:

AsyncLocal

这将在你的git repo git -C /path/to/git/repo your_git_command

的上下文中执行git命令

答案 1 :(得分:1)

我使用ShellJS解决了这个问题。 ShellJS有一个方法.cd(),可以更改目录并且似乎坚持。