2012-10-11 43 views
1

我用Apache和腳本檢索我的組,設置好gitolite。 我可以有效地控制誰可以進入存儲庫,但誰不能讀取。目前,如果我沒有在存儲庫上設置R = @all規則,則沒有人可以讀取它,即使是其他規則匹配的人也是如此。刪除R @all後在gitolite中找不到test/info/ref規則

我有以下gitolite配置:

repo testing 
    R  = @git-reader-test 
    R  = olivier 
# R  = @all #Will work if I uncomment this line 
    RW+  = @developers 

我wapper腳本中調用gitolite具有下面的代碼

echo "Entering gitolite wrapper" >> /home/dev_tools/git/gitauth.log 
echo "user: $REMOTE_USER" >> /home/dev_tools/git/gitauth.log 
echo "groups: $HTTP_REMOTE_USER_GROUPS" >> /home/dev_tools/git/gitauth.log 
exec /home/dev_tools/git/bin/gitolite-shell $REMOTE_USER 2>&1 |tee -a /home/dev_tools/git/gitauth.log 

,輸出:

Entering gitolite wrapper 
user: olivier 
groups: developers ... 
Status: 404 Not Found 
Expires: Fri, 01 Jan 1980 00:00:00 GMT 
Pragma: no-cache 
Cache-Control: no-cache, max-age=0, must-revalidate 

Repository not exported: '/home/dev_tools/git/repositories/testing' 

所以我的團體,甚至我的用戶名匹配R規則,但我被404錯誤拒絕,但如果我取消註釋t他R = @all規則我將能夠取回我的回購沒有任何問題。

我得到git fetch的錯誤是

fatal: http://[email protected]/testing/info/refs not found: did you run git update-server-info on the server? 

以及相應的gitolite日誌:

2012-10-11.15:52:10 26728  access(testing, olivier, R, 'any'),-> refs/.* 
2012-10-11.15:52:10 26728  trigger,Writable,access_1,ACCESS_1,testing,olivier,R,any,refs/.* 
2012-10-11.15:52:10 26728 pre_git testing olivier R any -> refs/.* 
2012-10-11.15:52:10 26728  system,git,http-backend 
2012-10-11.15:52:10 26728 END 

你有任何想法,爲什麼出現這種情況?

+1

也許問題有缺少'project.list'? (如http://serverfault.com/questions/419102/gitweb-document-root-with-gitolite) – VonC

回答

2

正如VonC所指出的,至少gitweb需要能夠讀取存儲庫。 ,給出(沒有任何細節)in gitolite documentation

repo @all 
    R  = gitweb daemon 

要我倉庫的配置:所以我可以通過添加解決這個問題。

我真的認爲,直到現在gitweb真的是獨立於gitolite,它只是用來有一個web界面的回購瀏覽,但我一定錯過了gitolite文檔中的東西。

恕我直言,它沒有很好地強調在鏈接的文檔,因爲我多次閱讀它之前詢問和無處它是說,沒有gitweb作爲閱讀器防止大家閱讀回購

編輯:請參閱Sitaram答案的解釋。

+0

良好的反饋意見。謝謝。 +1 – VonC

3

奇怪的是,它不是幫助你的「R = gitweb」,而是「R =守護進程」。是的,即使你使用的是Apache,似乎......「webbie」。

嘗試'man git-http-backend'並尋找'git-daemon-export-ok'。

的gitolite文檔不你需要這樣做,但建議配置包括

SetEnv GIT_HTTP_EXPORT_ALL 

其中,再根據「人的git-HTTP-後端」,是需要一種替代每個回購中的導出ok文件。想必你不會因爲任何原因而選擇這樣做。

這和gitolite沒有任何關係,真的。如果gitolite沒有去過那裏,你仍然有同樣的問題 - 有人有可能創造那些以出口爲確定文件(或您必須設置GIT_HTTP_EXPORT_ALL的環境變量)

sitaram

+0

感謝您提供的信息,現在我已經清楚了。我有SetEnv GIT_HTTP_EXPORT_ALL,但由於我suexeced gitolite包裝腳本這是不轉發。我認爲'man git-http-backend'或者你寫的最後一段是有價值的信息,可以添加到http://sitaramc.github.com/gitolite/external.html的git-deamon部分。 – jolivier

+0

偉大的增加。 +1。我同意jolivier:文檔可以從關於如何允許使用gitweb瀏覽repo的更多細節中受益。 (我從最近的經驗中知道,這個Stack Overflow答案的鏈接不會被接受https://plus.google.com/u/0/115609618223925128756/posts/VjewXCzfXgq;)) – VonC