我在travis上运行命令来计算当前正在测试的分支的主分支点(保证不是主分支)。
运行此命令:
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)
运行,并在Travis上给我当前分支的简短回报。
当我跑步时
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上会导致错误。
我从execute命令中的console.error中得不到任何有价值的信息,只需:err null
。
由于这在本地工作,即使在像travis原因的分离HEAD中,我的猜测是它与环境有关。 在Travis上运行的git版本是什么?
你能想到什么会导致这种情况无效吗? bash不可用吗?这个和其他有效的git命令之间的主要区别是bash -c
部分和进程替换。
您可以在此处查看构建页面https://travis-ci.org/VisualTesting/test-example/builds/54427942
答案 0 :(得分:1)
问题在于,由于travis只从git克隆了一个特定的分支,因此命令部分git rev-list --first-parent master
失败,因为它不知道master
分支。
将git fetch origin master:master
添加到我的before_install解决了这个问题。