Nodegit clone导致“No Content-Type标头响应”错误

时间:2015-09-28 18:41:41

标签: node.js git gitlab libgit2 nodegit

我在CentOS 6.7上遇到了nodegit的问题。在我们的Windows开发环境中,我能够使用nodegit从远程克隆/推/拉。

但是,在CentOS上,我在克隆上遇到以下错误:

  

响应中没有Content-Type标头

我们不使用Apache,只是标准的GitLab rpm。 GitLab在CentOS盒子上运行良好 - 我能够从Git Bash成功拉动和推动。不幸的是,我需要通过nodegit以编程方式执行此操作,但它无法正常工作。

如果可能的话,我宁愿不必诉诸CURL - 对于我的项目来说,nodegit似乎更像是一个更有尊严的选择。

应该注意的是,我在Gitlab实例上使用基本的HTTP用户/密码进行授权,因为:

  • gitlab和所有程序化的git东西都隐藏在服务器端,并且
  • 这是一个概念证明,看看nodegit / gitlab解决方案是否可行。

以下是尝试克隆的功能 - 它在Windows上运行良好:

function pushUserUpdatesToGit(req, res, user, myItem, localPath) {
    var repo, index, oid, remote,
    userCreds = {
        credentials: function() {
            return nodegit.Cred.userpassPlaintextNew(user.username, user.pwd);
        }
    },
    authStuff = {
        remoteCallbacks: {
            credentials: userCreds.credentials,
            certificateCheck: function() { return 1;  }
        }
    };

    return nodegit.Clone.clone(myItem.GitLabRepoPath, localPath, authStuff)
        .then(function(theRepo) {
            repo = theRepo; // save it to reference in any callback we feel like
        }, function (err) {
            console.log("Error cloning repo: " + err );
            return handleError(res, err);
        }
    ).then(function() {
        return repo.openIndex();
    }, function (err) {
        return handleError(res, err);
    })
    // Some exciting stuff happens in here that I won't bore you all with
    .catch(function(error) {
        console.log("ERROR DOING GIT STUFF: " + error);
        return handleError(res, error);
    }).done(function() {
        console.log("done with git stuff");
        return res.json(200, myItem);
    });
}

1 个答案:

答案 0 :(得分:0)

您似乎收到此错误,因为您的git服务器响应不支持智能HTTP(https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP)。

默认情况下,gitlab的nginx配置支持这一点。您是否有机会在反向代理后面运行gitlab包含的nginx设置?

如果没有,并且您没有使用gitlab中包含的nginx设置,这可能有所帮助:https://gist.github.com/massar/9399764