Posts

Showing posts with the label scm

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 และทะเลาะกันรุนแรง เลยต้องหาอ...

[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  ...