我正在编写node.js模块。我正在使用node.js api中的var exec = require('child_process').exec;
。但是我必须连续执行带有exec的2个git命令。
我总是收到以下错误消息:
exec错误:错误:命令失败:致命:无法创建 '〜/ Git / project / .git / index.lock':文件存在。
如果当前没有其他git进程正在运行,这可能意味着a git进程先前在此存储库中崩溃了。确保没有其他的git 进程正在运行并手动删除文件以继续。
我需要在第一个完成后执行seconed命令 - keyword:sync 到目前为止,我尝试使用execSync,但它不能在Windows系统上运行,这是不行的。
目前我正在使用asyncblock模块,但我也给了我上面提到的错误。
如果updateList中的两个值都为true,则会发生这种情况,如果一个值为false则全部按预期工作。
var loadPackageJson = function(updateList){
if(updateList.foo === true){
update('foo/package.json');
}
if (updateList.bar === true){
update('bar/package.json');
}
};
var update = function(path){
var packageJson = JSON.parse(fs.readFileSync(path,'utf8'));
incrementVersion(packageJson);
asyncblock(function(flow){
exec('git log -1 HEAD', flow.add('commit'));
var result = flow.wait('commit');
var commit=result.split('\n');
console.info(commit[0]);
setValueInPackageJson('commit', commit[0], packageJson);
writeUpdatedPackageJson(path, packageJson);
flow.wait();
exec('git add ' + path, flow.add('add'));
flow.wait('add'); //error is thrown here
console.info('added ' + path + ' successful to commit');
});
};
如何同步执行两个git命令?
/ edit我知道以下Thread on SO,但我帮助我解决这个问题。我在这个帖子上找到了asyncblock的提示。
/ EDIT2 控制台上的输出如下所示:
Version: 0.6.14
Version: 0.0.901
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
foo/package.json successfully updated
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
bar/package.json successfully updated
在我看来,这似乎是节点并行处理loadPackageJson
函数的处理。
BR&谢谢, mybecks