2012-11-17 85 views
2

我想通過http/https準備幾個可用的GIT存儲庫。我在這裏和那裏閱讀,並瞭解到git-http-backend,我遵循教程,並設法讓一切工作。我可以克隆提供我htpasswd文件中指定的創建的存儲庫(讓我們假設現在是user1和user2)並將更改推回。。使用ScriptAliasMatch時忽略.htaccess

我的回購在/var/www/git,gitweb也是如此。

等/的httpd/conf.d/git.conf

SetEnv GIT_PROJECT_ROOT /var/www/git 
SetEnv GIT_HTTP_EXPORT_ALL 

ScriptAliasMatch \ 
    "(?x)^/git/(.*/(HEAD | \ 
        info/refs | \ 
        objects/(info/[^/]+ | \ 
          [0-9a-f]{2}/[0-9a-f]{38} | \ 
          pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ 
        git-(upload|receive)-pack))$" \ 
    /usr/libexec/git-core/git-http-backend/$1 

ScriptAlias /git /var/www/git/gitweb.cgi 

<Location /git> 
    AuthType Basic 
    AuthName "Basic Auth" 
    AuthBasicProvider file ldap 

    # LDAP 
    AuthzLdapAuthoritative Off 
    AuthLDAPURL "ldap://[...]/CN=Users,DC=ad,DC=example,DC=com?sAMAccountName" 
    AuthLDAPBindDN "CN=Administrator,CN=Users,DC=ad,DC=example,DC=com" 
    AuthLDAPBindPassword Password11 

    # FILE 
    AuthUserFile /var/www/htpasswd 
    AuthGroupFile /var/www/git.groups 
    Require valid-user 
</Location> 

我克隆與

git clone http://localhost/git/gitrepo 
Username for 'http://localhost/git/gitrepo': user1 
Password for 'http://[email protected]': XXXXX 

問題庫是,我試圖建立資料庫爲基礎授權,我只希望一組用戶能夠訪問每個存儲庫。我想通了使用.htaccess文件將是完美的解決方案(無需重新啓動服務器),所以我把我的版本庫的目錄/ var /網絡/的git/gitrepo一個簡單的.htaccess:

Require User test2 

從理論上講,克隆/推送使用test1的更改應該被禁止,但它仍然有效。事實證明,.htaccess被忽略了,因爲無論我放在那裏,如果我通過身份驗證,我都可以克隆存儲庫。

我認爲ScriptAliasMatch可能存在問題,也許所有處理都轉到git-http-backend exec,並且它不會返回到Apache,因爲它重定向了所有流量?我在Apache中是一個相當新手,所以它可能是一個簡單的故事,但請 - 幫助! :)

更新1:是的,是的AllowOverride爲在/ var/WWW/git的主配置設置爲 「所有」:

<Directory "/var/www/git"> 
    AllowOverride All 
</Directory> 
+0

我想知道是否有什麼可以在這裏完成(我想我會加入郵件列表),但我只是想說我切換到Gitolite,它的作品像魅力:) –

回答

0

你的/ var/WWW/git的目錄外的正常的Web文檔樹。 這是一件好事,但這意味着只有git-http-backend將實際訪問此目錄,而不是Web服務器,因爲這樣的任何.htaccess 文件不會被讀取。

您需要在服務器conf區域進行身份驗證,以便 可以驗證URL或作爲git-http-backend程序所在的包裝。

雖然很少有文檔詳細說明如何執行此操作,但可以在單個服務器上有多個GIT存儲庫。