เมื่อคืนกะว่าจะเอาโค้ดขึ้นเซอร์ฟเวอร์อีกรอบหลังจากมันหายไปเพราะลงเครื่องใหม่ นั่งลงไปลงมา เลยอยากลองของซะหน่อย svn มันไม่สะใจใช้ git ละกันปรากฏว่าทำมันทั้งคืนเจอปัญหานู่นนี่จนกว่าจะเสร็จเช้านี้ -_-” ทำเสร็จขอเขียนวิธีเก็บไว้เป็นที่ระทึกหน่อยว่ามันสาหัสต่างจาก svn ขนาดไหน
เริ่มจากเตรียม Apache ก่อนแต่จริงๆ ที่ลงไปก็ลงไปพร้อมอยู่แล้วอ่ะนะจาก svn แต่ถ้าใครยังไม่ได้เตรียมก็ลงตามด้านล่างก่อนละกัน
- เริ่มจากลง mod_dav และ mod_dav_fs ก่อน(เอ๊ะ หรือมันมาพร้อมกันไม่แน่ใจ) ถ้าจำไม่ผิดมันจะมีให้เลือกตอนติดจาก port เลยแต่ถ้าเป็น Ubuntu คิดว่าง่ายกว่านั้น apt-get install mod_dav หรือป่าวหว่าแป๊บเดียวก็เสร็จ ส่วนแมคอื่มช่างมันละกัน(จริงๆ คือไปจิ๊ก FreeBSD เอามาใส่เลยก็ได้ ^^!)
- จากนั้นกำหนดล๊อกไฟล์ของ DAV ว่าจะให้เป็นไฟล์ในใน httpd.conf ด้านล่างนี่ใช้ของดั้งเดิมที่แถมมาให้หลังจากติดจาก port ขี้เกียจแก้
DavLockDB "/usr/local/var/DavLock"
- เตรียมไฟล์ที่เก็บรายชื่อคนที่เข้ามาใช้ได้ และก็รหัสผ่าน เอาแบบง่ายๆ นะ พอถามรหัสก็ใส่รหัสของ user นั้นไป
htpasswd -c /path/to/password/file username
- กำหนด 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 - สั่ง Apache เริ่มใหม่ซักหนึ่งรอบแล้วลองเข้าไปที่ URL ที่ใส่ไว้ดูด้วยโปรแกรมที่ใช้ webdav ได้(อย่าง Finder Cyberduck หรือจะเอาแบบพื้นๆ ก็ Telnet เข้าไปแล้วใช้ PROPFIND ลองเรียกดู ถ้าได้ก็ผ่าน)
เอาหละจบไปหนึ่งส่วนต่อไปก็ถึงตา git จริงๆ ส่วนนี้ไม่ค่อยมีอะไร(หรือป่าว -_-”) ลองดูละกัน
- เริ่มจากไปที่ตำแหน่งที่จะเอาไว้เก็บโค้ดที่ฝั่ง server แล้วสั่ง init repository ซะ
$git init --bare
ที่ใส่ bare เพราะว่าตำแหน่งนี้เราไม่ได้ไว้ใช้ทำงานมีแต่ config ล้วนๆ เพราะงั้นไม่ต้องเอาไปซ่อน สร้างมันตรงนี้เลย
เพิ่มเติม: หลังจาก init bare เสร็จต้องสั่ง git update-server-info ด้วยอีกรอบเพื่อให้มันสร้าง refs ในแฟ้ม info ไม่งั้น push เข้ามาไม่ได้ - ที่ฝั่งไคลเอ็นท์ไปที่ตำแหน่งของโปรเจคจากนั้นก็สั่ง init เหมือนกันพร้อมกับเอาไฟล์ยัดใส่ไปในนั้นให้พร้อม
$cd /path/to/project $git init $git add . $git commit
- หลังจากได้ git ที่ฝั่งไคลเอ็นท์แล้วจับมันส่งมาที่ฝั่งเซิร์ฟเวอร์ซะ
$git push user@server:/path/to/repository master -f
ไอ้ขั้นนี้แหละทำแสบมาก หาต้ังนานเพราะว่า webdav มันดันไม่สามารถสร้าง branch ให้ได้แล้วไอ้ branch master มันก็ไม่สร้างแต่แรกให้ไม่รู้ทำไมต้องใช้ ssh ส่งเข้ามาก่อนพร้อมขืนใจให้มันสร้างให้
เพิ่มเติม: พลาดเองจากตอนกำหนด DavLock ใน Apache ครับคือถ้ากำหนดถูก Apache สามารถสร้าง lock ได้ขั้นนี้ก็ไม่ต้อง - หลังจากนั้นเวลาแก้ไขไฟล์อะไร พอต้องการ merge รวมกับฝั่งเซิร์ฟเวอร์ก็ใช้คำสั่ง
$git config remote.upload.url http://username@host/location $git push upload master
คำว่า master สามารถเปลี่ยนได้แล้วแต่ branch ที่เราจะยัด ส่วนบรรทัดแรกเป็นการกำหนดตำแหน่งของ repository ซึ่งถ้าไปหาในเว็บทั้งหลายแหล่ มันดันมี – อยู่ระหว่าง git กับ config คาดว่าเป็นรุ่นเก่า หลังจากนี้ repository ในเครื่องเรากับเซิร์ฟเวอร์ก็จะเหมือนกันหละ
โอ่ถึงตัวสุดท้ายกันเสียที อันนี้เหมือนจะไม่ยากแต่ต้องไปแก้โค้ดนิดหน่อยเพื่อให้มันใช้ได้(ก็หวังว่าปลั๊กอินรุ่นใหม่ออกมาจะไม่ต้องแก้นะ)
- ติดตั้ง Trac ซักที่ด้วยคำสั่ง
$trac-admin /path/to/trac initenv
- จากนั้นไปเอา GitPlugins มาพร้อมกับขยาย
- แก้ไขไฟล์ tracext/git/PyGIT.py บรรทัดที่ 316 เป็น
#assert all(e is not None for e in self.__rev_cache)
(เอามันออกนั่นแหละ ^^!) - สั่งมันติดตั้งซะ
$python setup.py install
- แก้ไข config ของ Trac
repository_dir = /path/to/repository repository_type = git
จากนั้นลองเข้า Trac ผ่านหน้าเว็บดูก็น่าจะได้หละ
ขั้นตอนแค่นี้แหละ ไม่ยาวใช่มะๆ หามันทั้งคืนเลย -_-!!! เห้อไม่น่าลองของแปลกเลย แต่จะทำครึ่งๆ กลางๆ ซะก็ยังไงอยู่ ทำจนเสร็จจนได้หละ
อ้างอิง:
- Setting up a git repository which can be pushed into and pulled from over HTTP(S).
- Git repository with Apache (via WebDAV) and gitweb(อันนี้มีตัวอย่าง LimitExcept)
- Git repository over HTTP WebDAV with nginx
- GIT Quick start
- How can I delete a commit?(หัวข้อไม่เกี่ยวกันเล้ย แต่ทำให้แก้ปัญหาเรื่องสร้าง master branch ไม่ได้หละ ^^!)
Pingback: Hello, GIT again. | แนท (/næt/)
Pingback: แนท » Blog Archive » SVN Apache Trac