Tôi đã cố gắng hết sức để thúc đẩy git hoạt động thông qua chế độ "smart-http" bằng cách sử dụng git-http-backend. Tuy nhiên sau nhiều giờ thử nghiệm và xử lý sự cố, tôi vẫn còn
error: Cannot access URL http://localhost/git/hello.git/, return code 22
fatal: git-http-push failed`
Tôi đang sử dụng các phiên bản mới nhất của Ubuntu (12.04), Apache2 (2.2.22) và Git (1.7.9.5) và đã làm theo các hướng dẫn khác nhau được tìm thấy trên Internet, như thế này http://www.parallelsymmetry.com/howto/git .jsp .
Tệp Vhost của tôi hiện tại trông như thế này:
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
DocumentRoot /var/www/git
ScriptAliasMatch \
"(?x)^/(.*?)\.git/(HEAD | \
info/refs | \
objects/info/[^/]+ | \
git-(upload|receive)-pack)$" \
/usr/lib/git-core/git-http-backend/$1/$2
<Directory /var/www/git>
Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Tôi đã thay đổi quyền sở hữu của /var/www/git
thư mục thành root.www-data
và đối với các kho lưu trữ thử nghiệm của tôi, tôi đã kích hoạt tính năng đẩy ẩn danh bằng cách thực hiện git config http.receivepack true
. Tôi cũng đã thử với người dùng được xác thực nhưng với kết quả tương tự.
Các kho lưu trữ đã được tạo bằng cách sử dụng:
sudo git init --bare --shared [repo-name]
Trong khi nhìn vào access.log apache2, tôi thấy rằng WebDAV đang cố gắng được sử dụng và git-http-backend không bao giờ bị sa thải:
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/info/refs?service=git-receive-pack HTTP/1.1" 200 207 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/HEAD HTTP/1.1" 200 232 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "PROPFIND /git/hello.git/ HTTP/1.1" 405 563 "-" "git/1.7.9.5"
Tôi đang làm gì sai? Đây có phải là một vấn đề với phiên bản git và / hoặc apache mà tôi đang sử dụng không?
BTW: Tôi đã đọc tất cả các câu hỏi liên quan đến git http trên ServerFault và StackOverflow, và không ai trong số họ cung cấp cho tôi một giải pháp, vì vậy vui lòng không đánh dấu đây là trùng lặp.