Git พุชบน http (โดยใช้ git-http-backend) และ Apache ไม่ทำงาน


11

ฉันพยายามผลักดันให้คอมไพล์ทำงานผ่านโหมด "smart-http" โดยใช้ git-http-backend อย่างไรก็ตามหลังจากการทดสอบและการแก้ไขปัญหาหลายชั่วโมงฉันก็ยังเหลือ

error: Cannot access URL http://localhost/git/hello.git/, return code 22
fatal: git-http-push failed`

ฉันใช้ Ubuntu รุ่นล่าสุด (12.04), Apache2 (2.2.22) และ Git (1.7.9.5) และได้ติดตามบทเรียนต่าง ๆ ที่พบบนอินเทอร์เน็ตเช่นนี้http://www.parallelsymmetry.com/howto/git .jsp

ปัจจุบันไฟล์ VHost ของฉันมีลักษณะเช่นนี้:

<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>

ฉันมีการเปลี่ยนแปลงกรรมสิทธิ์ของ/var/www/gitโฟลเดอร์สำหรับเก็บการทดสอบของฉันฉันได้เปิดใช้งานการผลักดันโดยการทำที่ไม่ระบุชื่อroot.www-data git config http.receivepack trueฉันได้ลองกับผู้ใช้ที่ผ่านการตรวจสอบแล้ว แต่มีผลลัพธ์เหมือนกัน

ที่เก็บถูกสร้างขึ้นโดยใช้: sudo git init --bare --shared [repo-name]

ขณะที่ดูที่ apache2 access.log ดูเหมือนว่าฉันจะพยายามใช้ WebDAV และ git-http-backend นั้นไม่เคยถูกใช้งาน:

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"

ผมทำอะไรผิดหรือเปล่า? เป็นปัญหากับเวอร์ชันของ git และ / หรือ apache ที่ฉันใช้อยู่หรือไม่?

BTW: ฉันได้อ่านคำถามที่เกี่ยวข้องกับ http git ทั้งหมดใน ServerFault และ StackOverflow และไม่มีคำถามใดที่ให้โซลูชันฉันดังนั้นโปรดอย่าทำเครื่องหมายว่าซ้ำกัน


ฉันกำลังเผชิญกับปัญหาเดียวกันคุณมีวิธีแก้ไขหรือไม่?
Rishi Kulshreshtha

@RishiKulshreshtha: ขออภัยไม่พบวิธีแก้ปัญหาใด ๆ ย้ายไปที่ GitHub แทน ... นั่นบอกว่าฉันไม่ได้ลองวิธีแก้ปัญหาจาก Deepika หากใครบางคนสามารถยืนยันได้ว่ามันใช้งานได้ฉันจะยอมรับคำตอบนั้น
Nils Magne Lunde

ตกลงลองใช้วิธีแก้ปัญหาของ Deepika แต่ไม่ประสบความสำเร็จ
Nils Magne Lunde

แม้ว่าฉันจะลองใช้วิธีแก้ปัญหาของ Deepika ในตอนนี้ แต่ก็ไม่ได้ผลสำหรับฉันเช่นกัน
Rishi Kulshreshtha

คำตอบ:


1

ฉันคิดว่าการใช้ WebDAV นั้นหมายความว่า CGI ของคุณไม่ได้รับการกำหนดค่าอย่างเหมาะสม

ลองใช้คำสั่ง ScriptAlias ​​ตามที่แสดงในบทช่วยสอนที่คุณบอกว่าคุณกำลังติดตาม

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

สวัสดี ฉันเริ่มใช้ ScriptAlias ​​คำสั่ง แต่มันไม่ทำงาน
Nils Magne Lunde

ปัญหาเดียวกันที่นี่ คุณพบทางออกหรือไม่?
theV0ID

@ theV0ID ไม่ฉันไม่เคยพบวิธีแก้ปัญหา ใช้ GitHub แทนเซิร์ฟเวอร์ Git ในพื้นที่
Nils Magne Lunde

0

ในการแก้ไขปัญหานี้เราต้องเปิดใช้งาน WebDav ที่เซิร์ฟเวอร์ apache โดยใช้ 2 ขั้นตอน

  1. เปิดใช้งานที่ไฟล์ vhost ของ 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. เรียกใช้คำสั่งนี้ที่พร้อมท์คำสั่ง

    a2enmod dav_fs

  2. จากนั้นรีสตาร์ทเซิร์ฟเวอร์ apache

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.