Jan 03
llunระบบ branch, git
ตอนใช้ svn เวลาสร้าง branch ให่ทีแสนสบายเพราะเหมือนสร้าง directory ใหม่เท่านั้นเองแถมทำที่เดืยวด้วยแล้ว commit เข้าเซิร์ฟเวอร์แต่สำหรับ git ชีวิตที่แสนสะดวกสบายนั้นหายไปเพราะต้องเริ่มทำจากที่ฝั่ง remote ก่อนแล้วค่อยมาทำแยกที่เครื่องลองดูวิธีละกัน
- สร้าง branch ที่ฝั่ง remote ก่อนด้วยคำสั่ง
git push origin origin:refs/heads/new_feature_name
- จากนั้นเอากลับมาเพื่อความแน่ใจ(ลอง push สร้าง branch ใหม่เครื่องนึงแล้วอีกเครื่อง clone มาต้องทำขั้นนี้)
- ตรวจว่าที่ฝั่งเซิร์ฟเวอร์มี branch ใหม่หรือยัง
- สร้าง branch ใหม่ที่เครื่อง
git checkout --track -b new_feature_name origin/new_feature_name
- ดึงไฟล์กลับมาอีกที
อ้างอิง:
Nov 29
llunของเล่น Free, git, OSX
If you read my blog for a week, you will know I have tried to use git with my project. In first time it’s very hard to install on server but when use it, I think I like it. It very fast when commit code or check it out. It has command similar like SVN, so, it doesn’t hard to learn it. It’s a distributed version control means it doesn’t need to send data to server every time. It can combine commit by edit only text file and now it has graphic tool (in osx) that show change, diff and commit path. It’s GitX.
GitX is a simple tool used to show commit tree and file in each commit. It can show change before commit to repository and has editor for put detail. It can create branch and switch between it. Oh, it has so many features in it and its free. I founded it when I played AppFresh, automatic update application, it has “I use this” integration and has many suggestion app. So, if you never try it, it can found here and you will like git.
Nov 20
llunระบบ Apache, git, trac
เมื่อคืนกะว่าจะเอาโค้ดขึ้นเซอร์ฟเวอร์อีกรอบหลังจากมันหายไปเพราะลงเครื่องใหม่ นั่งลงไปลงมา เลยอยากลองของซะหน่อย 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
<Location /project.git>
#กำหนดให้ URL นี้สามารถใช้ webdav เข้ามาดูได้
DAV on
#จะเข้ามาดูได้ต้องตรวจสอบกันหน่อย(อยากได้พิศดาร ก็ไปหาดูในเว็บ Apache ละกัน)
AuthType Basic
AuthName Project name
AuthUserFile /path/to/password/file
#จะเข้ามาที่ URL นี้ได้ต้องมีรายชื่ออยู่ใน AuthUserFile (ถ้าอยากให้เข้ามาดูได้แต่ไม่สามารถแก้ไขได้ก็ใส่ <LimitExcept> ไป แต่ขี้เกียจเขียน ยาว
require valid-user
</Location>
- สั่ง Apache เริ่มใหม่ซักหนึ่งรอบแล้วลองเข้าไปที่ URL ที่ใส่ไว้ดูด้วยโปรแกรมที่ใช้ webdav ได้(อย่าง Finder Cyberduck หรือจะเอาแบบพื้นๆ ก็ Telnet เข้าไปแล้วใช้ PROPFIND ลองเรียกดู ถ้าได้ก็ผ่าน)
เอาหละจบไปหนึ่งส่วนต่อไปก็ถึงตา git จริงๆ ส่วนนี้ไม่ค่อยมีอะไร(หรือป่าว -_-”) ลองดูละกัน
- เริ่มจากไปที่ตำแหน่งที่จะเอาไว้เก็บโค้ดที่ฝั่ง server แล้วสั่ง init repository ซะ
ที่ใส่ 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)
(เอามันออกนั่นแหละ ^^!)
- สั่งมันติดตั้งซะ
- แก้ไข config ของ Trac
repository_dir = /path/to/repository
repository_type = git
จากนั้นลองเข้า Trac ผ่านหน้าเว็บดูก็น่าจะได้หละ
ขั้นตอนแค่นี้แหละ ไม่ยาวใช่มะๆ หามันทั้งคืนเลย -_-!!! เห้อไม่น่าลองของแปลกเลย แต่จะทำครึ่งๆ กลางๆ ซะก็ยังไงอยู่ ทำจนเสร็จจนได้หละ
อ้างอิง: