GIT Apache Trac

เมื่อคืนกะว่าจะเอาโค้ดขึ้นเซอร์ฟเวอร์อีกรอบหลังจากมันหายไปเพราะลงเครื่องใหม่ นั่งลงไปลงมา เลยอยากลองของซะหน่อย svn มันไม่สะใจใช้ git ละกันปรากฏว่าทำมันทั้งคืนเจอปัญหานู่นนี่จนกว่าจะเสร็จเช้านี้ -_-” ทำเสร็จขอเขียนวิธีเก็บไว้เป็นที่ระทึกหน่อยว่ามันสาหัสต่างจาก svn ขนาดไหน
เริ่มจากเตรียม Apache ก่อนแต่จริงๆ ที่ลงไปก็ลงไปพร้อมอยู่แล้วอ่ะนะจาก svn แต่ถ้าใครยังไม่ได้เตรียมก็ลงตามด้านล่างก่อนละกัน

  1. เริ่มจากลง mod_dav และ mod_dav_fs ก่อน(เอ๊ะ หรือมันมาพร้อมกันไม่แน่ใจ) ถ้าจำไม่ผิดมันจะมีให้เลือกตอนติดจาก port เลยแต่ถ้าเป็น Ubuntu คิดว่าง่ายกว่านั้น apt-get install mod_dav หรือป่าวหว่าแป๊บเดียวก็เสร็จ ส่วนแมคอื่มช่างมันละกัน(จริงๆ คือไปจิ๊ก FreeBSD เอามาใส่เลยก็ได้ ^^!)
  2. จากนั้นกำหนดล๊อกไฟล์ของ DAV ว่าจะให้เป็นไฟล์ในใน httpd.conf ด้านล่างนี่ใช้ของดั้งเดิมที่แถมมาให้หลังจากติดจาก port ขี้เกียจแก้
    DavLockDB "/usr/local/var/DavLock"
    
  3. เตรียมไฟล์ที่เก็บรายชื่อคนที่เข้ามาใช้ได้ และก็รหัสผ่าน เอาแบบง่ายๆ นะ พอถามรหัสก็ใส่รหัสของ user นั้นไป
    htpasswd -c /path/to/password/file username
  4. กำหนด URL ที่จะให้ใช้ผ่านเว็บได้พร้อมกับกำหนดให้ URL นั้นสามารถใช้ DAV ได้
    Alias /project.git /path/to/repository
    
    
      #กำหนดให้ URL นี้สามารถใช้ webdav เข้ามาดูได้
      DAV on
    
      #จะเข้ามาดูได้ต้องตรวจสอบกันหน่อย(อยากได้พิศดาร ก็ไปหาดูในเว็บ Apache ละกัน)
      AuthType Basic
      AuthName Project name
      AuthUserFile /path/to/password/file
    
      #จะเข้ามาที่ URL นี้ได้ต้องมีรายชื่ออยู่ใน AuthUserFile (ถ้าอยากให้เข้ามาดูได้แต่ไม่สามารถแก้ไขได้ก็ใส่
     ไป แต่ขี้เกียจเขียน ยาว
      require valid-user
    
    
  5. สั่ง Apache เริ่มใหม่ซักหนึ่งรอบแล้วลองเข้าไปที่ URL ที่ใส่ไว้ดูด้วยโปรแกรมที่ใช้ webdav ได้(อย่าง Finder Cyberduck หรือจะเอาแบบพื้นๆ ก็ Telnet เข้าไปแล้วใช้ PROPFIND ลองเรียกดู ถ้าได้ก็ผ่าน)

เอาหละจบไปหนึ่งส่วนต่อไปก็ถึงตา git จริงๆ ส่วนนี้ไม่ค่อยมีอะไร(หรือป่าว -_-”) ลองดูละกัน

  1. เริ่มจากไปที่ตำแหน่งที่จะเอาไว้เก็บโค้ดที่ฝั่ง server แล้วสั่ง init repository ซะ
    $git init --bare
    
    ที่ใส่ bare เพราะว่าตำแหน่งนี้เราไม่ได้ไว้ใช้ทำงานมีแต่ config ล้วนๆ เพราะงั้นไม่ต้องเอาไปซ่อน สร้างมันตรงนี้เลย
    เพิ่มเติม: หลังจาก init bare เสร็จต้องสั่ง git update-server-info ด้วยอีกรอบเพื่อให้มันสร้าง refs ในแฟ้ม info ไม่งั้น push เข้ามาไม่ได้
  2. ที่ฝั่งไคลเอ็นท์ไปที่ตำแหน่งของโปรเจคจากนั้นก็สั่ง init เหมือนกันพร้อมกับเอาไฟล์ยัดใส่ไปในนั้นให้พร้อม
    $cd /path/to/project
    $git init
    $git add .
    $git commit
    
  3. หลังจากได้ git ที่ฝั่งไคลเอ็นท์แล้วจับมันส่งมาที่ฝั่งเซิร์ฟเวอร์ซะ
    $git push user@server:/path/to/repository master -f
    
    ไอ้ขั้นนี้แหละทำแสบมาก หาต้ังนานเพราะว่า webdav มันดันไม่สามารถสร้าง branch ให้ได้แล้วไอ้ branch master มันก็ไม่สร้างแต่แรกให้ไม่รู้ทำไมต้องใช้ ssh ส่งเข้ามาก่อนพร้อมขืนใจให้มันสร้างให้
    เพิ่มเติม: พลาดเองจากตอนกำหนด DavLock ใน Apache ครับคือถ้ากำหนดถูก Apache สามารถสร้าง lock ได้ขั้นนี้ก็ไม่ต้อง
  4. หลังจากนั้นเวลาแก้ไขไฟล์อะไร พอต้องการ merge รวมกับฝั่งเซิร์ฟเวอร์ก็ใช้คำสั่ง
    $git config remote.upload.url http://username@host/location
    $git push upload master
    
    คำว่า master สามารถเปลี่ยนได้แล้วแต่ branch ที่เราจะยัด ส่วนบรรทัดแรกเป็นการกำหนดตำแหน่งของ repository ซึ่งถ้าไปหาในเว็บทั้งหลายแหล่ มันดันมี – อยู่ระหว่าง git กับ config คาดว่าเป็นรุ่นเก่า หลังจากนี้ repository ในเครื่องเรากับเซิร์ฟเวอร์ก็จะเหมือนกันหละ

โอ่ถึงตัวสุดท้ายกันเสียที อันนี้เหมือนจะไม่ยากแต่ต้องไปแก้โค้ดนิดหน่อยเพื่อให้มันใช้ได้(ก็หวังว่าปลั๊กอินรุ่นใหม่ออกมาจะไม่ต้องแก้นะ)

  1. ติดตั้ง Trac ซักที่ด้วยคำสั่ง
    $trac-admin /path/to/trac initenv
    
  2. จากนั้นไปเอา GitPlugins มาพร้อมกับขยาย
  3. แก้ไขไฟล์ tracext/git/PyGIT.py บรรทัดที่ 316 เป็น
    #assert all(e is not None for e in self.__rev_cache)
    
    (เอามันออกนั่นแหละ ^^!)
  4. สั่งมันติดตั้งซะ
    $python setup.py install
    
  5. แก้ไข config ของ Trac
    repository_dir = /path/to/repository
    repository_type = git
    
    จากนั้นลองเข้า Trac ผ่านหน้าเว็บดูก็น่าจะได้หละ

ขั้นตอนแค่นี้แหละ ไม่ยาวใช่มะๆ หามันทั้งคืนเลย -_-!!! เห้อไม่น่าลองของแปลกเลย แต่จะทำครึ่งๆ กลางๆ ซะก็ยังไงอยู่ ทำจนเสร็จจนได้หละ
อ้างอิง:

About llun

Just a programmer

, ,