Git đẩy qua http (sử dụng git-http-backend) và Apache không hoạt động


11

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/gitthư mục thành root.www-datavà đố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.


Tôi đang đối mặt với cùng một vấn đề, bạn đã có giải pháp nào chưa?
Rishi Kulshreshtha

@RishiKulshreshtha: Xin lỗi, không tìm thấy giải pháp nào. Chuyển sang GitHub thay vào đó ... Điều đó nói rằng tôi chưa thử giải pháp từ Deepika. Nếu ai đó có thể xác minh rằng nó hoạt động tôi sẽ chấp nhận câu trả lời đó.
Nils Magne Lunde

Ok, đã thử giải pháp của Deepika, nhưng không thành công.
Nils Magne Lunde

Ngay cả tôi đã thử giải pháp của Deepika vừa rồi, nó cũng không hiệu quả với tôi.
Rishi Kulshreshtha

Câu trả lời:


1

Tôi nghĩ rằng việc WebDAV đang được sử dụng có nghĩa là công cụ CGI của bạn không được cấu hình đúng.

Cố gắng sử dụng chỉ thị ScriptAlias ​​theo cách họ thể hiện trong hướng dẫn mà bạn nói bạn đang theo dõi.

ScriptAlias /git /usr/lib/git-core/git-http-backend

Chào. Tôi đã bắt đầu sử dụng chỉ thị ScriptAlias, nhưng nó không hoạt động.
Nils Magne Lunde

Cùng một vấn đề ở đây. Bạn đã tìm thấy một giải pháp?
theV0ID

@ theV0ID Không, tôi không bao giờ tìm thấy giải pháp. Sử dụng GitHub ngay bây giờ thay vì máy chủ Git cục bộ.
Nils Magne Lunde

0

Để khắc phục điều này, chúng tôi cần kích hoạt WebDav tại máy chủ apache bằng 2 bước

  1. kích hoạt tại tập tin vhost của apache

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

DocumentRoot /var/www/git

<Directory /var/www/git>
        Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews

        AllowOverride None
        Order allow,deny
        allow from all
        Dav On
</Directory>

  1. Chạy lệnh này tại dấu nhắc lệnh

    a2enmod dav_fs

  2. Sau đó khởi động lại máy chủ apache.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.