Hello, GIT again.

อาทิตย์นี้เตรียมงานใหญ่ย้าย VCS Project หลักจาก SVN ไป GIT ซึ่งคาดเดาไว้แล้วว่าต้องเจอปัญหาแน่นอน ก็คิดไม่ผิดเสียจริงๆ แต่ทำคราวนี้พบว่าเดี๊ยวนี้ GIT มีตัวช่วยสำหรับ HTTP แล้วเรียกว่า Smart HTTP ขั้นตอนก็ต่างจากคราวที่แล้วนิดหน่อย แต่คราวนี้จะตัดส่วน Trac ทิ้งทั้งหมด เพราะสิ่งที่ทำให้ลำบากชีวิตมากสุดก็คือ Trac นั่นเอง (นั่งทำให้มันแสดง source ได้กับ repository ที่มีขนาดใหญ่นี่ไม่สนุกเลย)

  1. เริ่มจากแก้ไข Apache ให้รู้ว่า URL ไหนจะเป็น repository

    #ตำแหน่งของ GIT Repository
    SetEnv GIT_PROJECT_ROOT /var/repositories
    SetEnv GIT_HTTP_EXPORT_ALL
    #URL ที่จะใช้เป็น repository
    ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
    

    สำหรับ path ของ git-http-backend ก็ขึ้นอยู่กับตำแหน่งที่ลงหรือ OS เพราะถ้าเป็น FreeBSD git-http-backend จะอยู่ที่ /usr/local/libexec/git-core/git-http-backend แทน

  2. จากนั้นกำหนดให้ Apache ตรวจสอบคนที่จะ push/pull

    <location /git>
            AuthType Basic
            AuthName "Git Access"
            Require group committers
            ...
    </location>
    

    หรือถ้าอยากให้ใคร clone ก็ได้แต่ถ้าต้องการ push ต้อง authen เท่านั้นก็

    <LocationMatch "^/git/.*/git-receive-pack$">
            AuthType Basic
            AuthName "Git Access"
            Require group committers
            ...
    </LocationMatch>
    
  3. จากนั้นเอา repo ที่ convert จาก SVN มาวางไว้ตำแหน่งที่กำหนดว่าเป็น path ที่ใช้เก็บ repository (จาก config ด้านบนก็คือ /var/repositories สำหรับวิธี convert ใช้ git svn clone ออกมาก แล้วเปลี่ยน remote branch ให้เป็น local branch ให้เรียบร้อย (ส่วนนี้ @teerapapc ทำให้เห็นบอกว่ากว่าจะแปลงเสร็จเป็นวัน ฮะๆ)
  4. clone git repository ที่ clone จาก svn มาแล้วอีกทีด้วยคำสั่ง git clone –bare (ไม่แน่ใจว่าจะ copy .git ออกมาตรงๆ ได้ป่าวแต่คิดว่าทำได้เหมือนกัน) จากนั้นสั่ง git gc เพื่อรวม object ให้เรียบร้อยก่อนจะเจอหายนะในภายภาคนะ (ไม่งั้นใคร clone ทีต้อง pack ทีด้วยขนาด repository ที่ใหญ่เป็นหมื่น commit เครื่องที่ใช้ทำอาจตายก่อนได้)
  5. ทำเสร็จทุกขั้น reload Apache ซักหนึ่งทีก็เรียบร้อย ไม่ต้องยุ่งอะไรกับ WebDAV อีกต่อไป

แต่ว่าทำเสร็จก็คิดว่าคงจะไม่ convert มาเป็นแน่แท้ เพราะมีขยะติดตามมาด้วยมากมาย เก็บมันไว้ใน SVN เป็นความทรงจำดีกว่า อาจจะ convert เพื่อทำ archive ง่ายๆ นิดหน่อยแต่ตัดส่วนเก่าทิ้งไปเลยเพื่อความสวยงาม

งานที่เหลือคือทำ Trac ให้เชื่อมกับ GIT โดยที่ไม่กินแรงเครื่องมากนัก ซึ่งก็พอมีแนวทางแล้วหละ โดยคิดว่าจะตัดส่วน browse source ออกจาก Trac ทิ้งแล้วเชื่อมกับ gitweb เองน่าจะสวยงามกว่า ไว้อาทิตย์หน้าย้ายจริงคงเห็นผลหละว่าจะเจอปัญหาอะไรอีก

อ้างอิง:

About llun

Just a programmer

, , ,