我正在尝试使用节点脚本以编程方式将分支合并到主分支中。我尝试的第一件事是来自Execute a command line binary with Node.js,它可以很好地执行终端命令。但是我在更改工作目录时遇到了困难。我想将工作目录更改为git存储库,然后从那里运行git命令。执行cd ~/repo
或cd /home/me/repo
根本没有更改工作目录,除了使用cd
之外,我找不到任何更改方法。
然后我尝试从脚本的目录执行git命令,但指向我的repo。我尝试了git --git-dir
和git --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
答案 0 :(得分:1)
请改为使用:
AsyncLocal
这将在你的git repo git -C /path/to/git/repo your_git_command
答案 1 :(得分:1)
我使用ShellJS解决了这个问题。 ShellJS有一个方法.cd()
,可以更改目录并且似乎坚持。