我正在使用Apache和git-http-backend.exe在WS 2008計算機上設置Git服務器(1.7.2.3)。我一直在關注着一個好主意here。我有GUI的工作,我可以annoymously克隆,如果我把回購的配置,下面我可以annoymously推:在Windows上設置Git服務器使用git-http-backend.exe
[http]
receivepack = true
我已經添加了以下到httpd.conf文件:
SetEnv GIT_PROJECT_ROOT C:/GIT/Repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
"(?x)^/(.*/(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))$" \
"C:/Program Files (x86)/git/libexec/git-core/git-http-backend.exe/$1"
<Directory />
Allow from all
</Directory>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups
Require group repogeneral
</LocationMatch>
當我添加「LocationMatch」我仍然可以克隆annoymously或通過在URL,克隆的git http://[email protected]
它會提示輸入密碼,並克隆指定名稱。
但是當我嘗試推回至回購我得到如下:
錯誤:無法訪問URL http://[email protected]/newtestrepo.git/,返回碼22 致命:混帳HTTP推送失敗
我一直在尋找在http-backend.exe man page例如,但不能讓他們的工作。
這裏是我組文件,(這只是測試的例子所以沒有什麼會在督促使用):
admin: jon steve admin
webview: jon steve web
repogeneral: jon steve
testrepo: jon admin
testrepo2: jon steve web
這裏是用戶文件:
jon:$apr1$kEKVExYx$guIF9oYV8buGhFLZr16XN0
steve:$apr1$jvgjF9nv$PvWsHH.cSOBN5ymk6NT1B0
admin:$apr1$vzXgDskN$oszCei3tkHNUgtLj2HkHF/
web:$apr1$wS0do7hb$VA9tsc9c9LwY5PcjfhdwK0
我知道用戶名jon的作用就像我把目錄要求放在gui部分我可以用用戶名jon登錄沒有問題,(指向與locationmatch相同的用戶和組文件)。
我不確定什麼配置我錯過了在這一點上(假設它的配置問題)。
任何關於克服這最後一道障礙的建議都會很棒。
編輯
我一直在玩一些,這裏是我的資料:
如果我克隆一個回購協議:
git clone http://[email protected]/remotetest.git
我可以得到庫出來,但是當我嘗試推回:
git push origin master
我被問了我的密碼,我進入它,然後再要求它,然後我得到了以下錯誤:
C:\ TEMP \ remotetest \ remotetest>混帳推起源主 密碼: 密碼: 錯誤:無法訪問URL http://[email protected]/remotetest.git/,返回碼22 致命︰git-http-push失敗
在我的Apache訪問。登錄我得到如下:
192.168.1.2 - - [29/Sep/2010:21:58:19 +0100] "GET /remotetest.git/info/refs?service=git-upload-pack HTTP/1.1" 200 38
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs?service=git-receive-pack HTTP/1.1" 403 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs HTTP/1.1" 200 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/HEAD HTTP/1.1" 200 23
有趣的是,當我在不要緊,我把什麼密碼在URL中的用戶名克隆,它仍然會正常工作。我假設這是因爲我應該能夠匿名拉。不知道爲什麼當時要求輸入密碼。
我也看到這個在日誌中的錯誤:
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe
EDIT 2
我試圖做重新創建密碼文件:
htpasswd -c -m C:/git/apacheconfig/users jon
但這並沒有幫助。
編輯3
httpd.conf中的PHP配置它使用相同的用戶文件的基本身份驗證:
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
AuthName "GitUsers"
AuthType Basic
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups
require group webview
</Directory>
EDIT 4
行,所以我可以得到以愉快的方式克隆和推入惡意模式,但認證失敗的推動。
C:\temp\test2\temp\test>git push origin master
Password:
Password:
error: Cannot access URL http://[email protected]:8000/repositories/test.git/, return code 22
fatal: git-http-push failed
我改變了httpd.conf中使用以下命令:
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories"
SetEnv GIT_HTTP_EXPORT_ALL
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories">
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/repositories/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories/.htpasswd"
Require valid-user
</LocationMatch>
ScriptAliasMatch \
"(?x)^/repositories/(.*/(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))$" \
"C:/Program Files (x86)/Git/libexec/git-core/git-http-backend/$1"
ErrorLog C:/GIT/error_log
CustomLog C:/GIT/access_log combined
</VirtualHost>
有趣的是,當我創建了一個新的回購協議(git的初始化--bare newrepo.git)它沒有建立一個信息/參考文件。我不得不做「git update-server-info」命令來創建它。
Apache的訪問日誌有一些有趣的事情,可能是一個線索:
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 -
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/HEAD HTTP/1.1" 200 23
192.168.10.97 - - [05/Oct/2010:22:48:28 +0100] "PROPFIND /repositories/test.git/ HTTP/1.1" 405 248
這是當我試圖「推」回回購,但他們是GET命令和POST沒有。不知道PROPFIND是什麼,還沒有發現很多信息。我想,(閱讀周圍),可能會發生某種重寫,即將POST更改爲GET並將其殺死,或者其他。儘管如此,我在這方面還沒有深入。
謝謝
我不知道爲什麼「'htdocs'」進入在Directory'definition的'長期圖片。 – VonC 2010-10-04 10:26:22
這是Apache從中提供文件的默認位置。我使用PHP gui來顯示存儲庫,它使用相同的authuserfile,並提供彈出式登錄並使用相同的用戶名和密碼。使用它作爲測試,以確保Apache可以理解用戶密碼文件。 – Jon 2010-10-04 12:23:48
這個問題應該在http://serverfault.com/上,因爲它不涉及編程和更多的設置和配置,不是? – 2010-10-09 06:14:52