Posts

Showing posts with the label source control

Geeky Academy: Git 4 Geeks Part II

Image
ในที่สุดก็ได้เวลาเขียนซะที หลังจากที่ได้ลองใช้สิ่งที่พี่ดีนสอน มากขึ้นในการเรียนครั้งนี้ ... ใครพึ่งเข้ามา Blog นี้ ควรจะอ่าน Part I ก่อนนะครับ Geeky Academy: Git 4 Geeks Part I เอาล่ะ มาเริ่มจากการทบทวนของเก่ากันบ้าง ในประเด็นที่ผมไม่ได้เขียนใน Part I  svn add != git add การสั่ง svn add จะเป็นการ Tracked File นั้นๆ ไปเลย แต่ git add จะเป็นการไฟล์เข้าพื้นที่ที่เรียกว่า staging area ซึ่งจะเป็นพื้นที่ ที่จะกลายเป็น commit ในอนาคต เราจะได้ภาพแบบนี้ เมื่อเราทำการสั่ง git add  จุดที่เขียนว่า INDEX นั่นล่ะครับ เรียกว่า Staging Area จนกว่าเราจะ commit ก็จะกลายเป็น commit ที่ 5 แล้วย้าย Pointer ของ HEAD และ Master ไปชี้ต่อ  $ git diff และ $ git diff --cache การทำงานของ Git นั้น เราจะแบ่งออกเป็น 3 สถานะ นั่นคือ ขณะที่เราแก้ไขไฟล์ ( working directory ) จากนั้นเราสร้าง snapshop ด้วยคำสั่ง git add ( staging area ) และเราทำการ commit (ส่วนนี้จะเรียกว่า repository ) ตามภาพเลย git diff จะเป็นการเทียบความเปลี่ยนแปลงระหว่าง Working Directory และ Sta...

Geeky Academy: Git 4 Geeks Part I

Image
เมื่อก่อนเราแชร์ Open Source Software โดยใช้ Centralized SCM (Source Control Management) คือการมีเซิร์ฟเวอร์เพื่อเก็บ Code เอาไว้และใครต้องการเข้ามาทำงานก็โหลดลงไปทำงาน โดยซอฟต์แวร์ที่เป็นที่นิยมเช่น SVN แต่เนื่องจากไม่เหมาะกับ Project ที่มี Contributor (ผู้ร่วมพัฒนา) เยอะ โดยมีปัญหา เนื่องจากมี Code กลางแค่ชุดเดียว ขอยกตัวอย่าง Linux Kernel ยุคแรกๆ Linus ก็ต้องหาคนที่ไว้ใจในการที่จะส่งโค้ดไปรวมที่โค้ดกลาง (ซึ่งก็มีเพียงไม่กี่คน) แต่ Developer มีเยอะ ดังนั้นต้องให้คนที่ถูก Linus ไว้ใจช่วยกัน Review Code โดย Developer ที่ Linus เองถ้าให้ตรวจทั้งหมดก็ไม่ไหว ก็ต้องมีมือขวามาช่วยตรวจอีก ถ้า Developer เยอะขึ้นเรื่อยๆ ปัญหานี้ก็จะ Recursive ไปเรื่อยๆ นั่นเอง  จึงทำให้ Linus เกลียดมาก เพราะสภาพการทำงานแบบ Centralized SCM ยากต่อการ Scale Linux Kernel จึงหันมาใช้ BitKeeper แทน มาช่วยให้ Linux Kernel Scale ต่อได้ แต่ก็พบข้อจำกัดต่างๆ (ส่วนใหญ่เป็นเรื่อง Comercial License) Linus และทีมจึงทำการ Reverse Engineer Protocol ของ BitKeeper จนผิด Policy และทะเลาะกันรุนแรง เลยต้องหาอ...

[iOS Dev] Source Control Integration on Xcode 5

Image
มีใครใช้ Git บ้าง ยกมือขึ้น! Xcode 5 ออกมาพร้อมกับ Source Control Integration with Git แบบเต็มๆ ให้เราใช้กัน จริงๆ แล้ว Xcode 4.x ก็มี แต่เหมือนว่า ตอนนั้น Apple ยังไม่ค่อยจริงจังเท่าไหร่  แค่ใส่มาให้รู้ว่า "ฉัน Integrate Git ให้แล้วนะ" แต่ Xcode 5 นี่เหมือนจะสนับสนุนกันเต็มตัวเลย ใน Entry นี้เราจะว่ากันเรื่อง Basic การใช้งานของ Git เท่านั้น (stage, commit, push, pull) เพื่อไม่ให้มันยืดยาวเกินไป เริ่มกันเลย! ใครยังไม่รู้จักไปอ่านเบื้องต้นได้ที่นี่ >  Introduction to Git & Github ในตอนที่สร้าง Project ใหม่ให้ติ๊กถูกตรงนี้ด้วย ซึ่งเป็น Default Option อยู่แล้ว จากนั้นผมทำการแก้ File แล้วเลือก Commit ที่อยู่ใน Source Control Menu Xcode จะแสดงหน้า Version Editor แล้วมี Sidebar ด้านซ้ายบอกว่ามีไฟล์ไหนที่ถูกแก้ไปบ้าง ก็เลือกดูก็จะแสดงว่าแก้อะไรไปบ้าง จากนั้นกด Commit แค่นี้ก็เรียบร้อย ถ้าเทียบกับตอนที่เราใช้ Git ผ่าน Command-line หรือแบบปกติ จะเห็นว่า Xcode ได้รวบขั้นตอนการ Stage มาไว้ที่ Commit Menu เลย เนื่องจากเราสามารถเลือ...

[Git] .gitignore

Image
อาจจะมีบางไฟล์ที่เราไม่จำเป็น หรือไม่ต้องการให้ Git ทำการ Track เราจะใช้ .gitignore File เพื่อระบุว่าจะไม่ให้ตามไฟล์ไหนบ้าง ... อาจจะบอกว่า เราแค่เลือกไม่ตามก็ได้นี่ นั่นก็ใช่ แต่การที่เราต้องการเลือกทุกครั้งเวลา add ก็ไม่ใช่เรื่องดีนัก วิธีการก็คือไปสร้าง .gitignore ไว้ใน working directory ของเราแล้วระบุไปเลยครับ จากนั้นก็ใช้ git add . ได้ตามปกติโดยไม่ต้องพะวงเรื่องไฟล์ที่เราไม่ต้องการให้มัน track ละ ** จะสังเกตุว่าชื่อไฟล์นั้นจะมี . นำหน้า แปลว่าเป็น hidden file ถ้าเราสั่ง $ ls จะมองไม่เห็น ต้องใส่ $ ls -a บน shell นะครับ ถึงจะเห็นไฟล์นี้ แต่ยังสามารถ access ได้ปกติแม้จะไม่เห็น (เช่น $ cat .gitignore) ซึ่ง Project ของแต่ละ Framework ก็มีไฟล์ที่ไม่จำเป็นต้อง Track ต่างกันไป ผมลงที่ผมเขียนประจำก็คือ iOS และ Rails นะ ส่วนใครจะหา .gitignore ที่ควรใช้ของ Project รูปแบบอื่น เชิญที่นี่เลย -->  https://github.com/github/gitignore อันนี้สำหรับ iOS Project โหลดได้ที่นี่เลยครับ -->  https://gist.github.com/4475403 อันนี้สำหรับ Rails Project  ...