2015-06-05 37 views
2

我在我的服务器上创建git存储库。我的要求是,我必须在服务器上创建多个git存储库,我必须使用用户名和密码来保护它们。git-http-backend通过http推送代码导致问题

由于有多个git存储库被创建,我将.htpasswd和.htaceess放在每个git存储库文件夹中以保护它们。

下面是我正在做的整个流程。

a)使用git -bare创建git存储库。
b)在该文件夹中创建.htpasswd和.htaccess以进行身份​​验证 c)现在我可以使用用户名和密码在任何地方克隆该回购站。

但是当我尝试从克隆的推动回购它扔我一个错误: 错误:无法访问URL http://192.168.1.2/projects/gitcreation/gitrepos/6/project6/,返回码22 致命:混帐HTTP推送失败

任何帮助将高度赞赏。

回答

0

我最初建议删除gitolite的推/拉呼叫(见下文),但OP希望保持直接呼叫。

Jiva怀疑git-http-backend未被呼叫推送(其中wouldn't work well indeed)检查for instance this configthis one

另一个检查将是.gitconfig of the bare repohttp.receivepack

由于这thread illustrates,这个问题可能是一个证书一个(密码不正确,或密码与它特殊字符时,错误地解释)


原始答案。

而不是依靠.htaccess/.htpasswd每一个混帐回购协议的,最好是打电话gitolite,一个authorization layer用Perl(very easy to install),它可以根据阿帕奇进行认证,授予回购。

有关更多信息,请参阅“What is gitolite”。

见我httd.conf for example(忽略@[email protected],他们是模板占位符,要由实际值以后替换)

<VirtualHost @[email protected]:@[email protected]> 
    ServerName @[email protected] 
    ServerAlias @[email protected] 
    SetEnv GIT_PROJECT_ROOT @[email protected]/repositories 
    SetEnv GIT_HTTP_EXPORT_ALL 
    SetEnv GITOLITE_HTTP_HOME @[email protected] 
    ScriptAlias /hgit/ @[email protected]/sbin/gitolite-shell/ 
    SetEnv GIT_HTTP_BACKEND "@[email protected]/usr/local/apps/git/libexec/git-core/git-http-backend" 
    <Location /hgit> 

这里,任何/hgit URL(/projects你),/home/git/sbin/gitolite-shell被调用。
如果gitolite授予用户访问回购的权限,它将调用GIT_HTTP_BACKEND,这是git/libexec/git-core/git-http-backend所在的位置。

Gitolite允许您设置many access rules每个回购,甚至每个分支或每个文件!

+0

Vonc - 唯一的最后一个问题是我们无法将代码推到git即git-http-backend没有被调用或有些丢失。否则每件事都被照顾。 另外gitolite提供了一个web界面。所以这对我们来说是非常好的。 – Jiva

+0

@Jiva gitolite不提供Web界面,所以它应该仍然是一个有效的选项。 – VonC

+0

好吧,但我们现在不得不改变我们所有的实现来实现它。我们只是停留在最后一点,我们的git-http-backend没有被调用。 – Jiva