在travis上运行child_process.exec失败,而不是在本地运行

我正在travis上运行一个命令来计算从我当前testing的分支的主分支点(保证不是主)。

运行这个命令:

function execute(cmd, cb) { exec(cmd, function (err, stdout, stderr) { if(err) { console.error('err', err); } if(stderr) { console.error('err', err); } cb(stdout.split('\n').join('')); }); } execute('git rev-parse --short HEAD', cb) 

运行,并返回我目前的分支短的特拉维斯很好。

当我跑步

 var command = "bash -c 'diff -u <(git rev-list --all bf2a1b7b7cf97f5df0618830f63d535db1a5dca6) "+ "<(git rev-list --first-parent master)' "+ "| sed -ne 's/^ //p' | head -1"; execute(command, cb); 

这返回我正是我想要的本地,但在Travis导致一个错误。 我没有从执行命令中的console.error中获得任何有价值的信息,只是: err null

既然这在当地是有效的,即使是像特拉维斯原因那样的独立头部,我的猜测也是与环境有关。 在Travis上运行的git版本是什么?

有没有什么你能想到的,会导致这个不工作? bash不可用? 这和其他git命令的主要区别在于bash -c部分和进程replace。

你可以在这里看到构build页面https://travis-ci.org/VisualTesting/test-example/builds/54427942

问题是,因为travis克隆只有一个特定的分支git,命令部分git rev-list --first-parent master失败,因为它不知道master分支。

添加git fetch origin master:master到我的before_install解决了这个问题。