คิดว่าในแวดวงของ developers คงได้ยินเรื่อง git มาสักพักแล้วล่ะ เพราะมันได้เริ่มเข้ามามีบทบาทได้ประมาณหนึ่งแล้ว ซึ่งนับจากวันแรกที่ตัวผมเองรู้จักก็ 3-4 ปีเห็นจะได้ละ และใช้จริง ๆ จัง ๆ ในการพัฒนาในองค์กรก็ 2 ปีกว่า ๆ แล้ว เรียกได้ว่าเห็นข้อดีและข้อเสียพอจะบอกกล่าวกันได้

ผมเริ่มจับหน้าจอตั้งแต่เวอร์ชั่น 1.9.x นะแต่ก็อีกนั่นแหละไม่ได้อัพโหลดขึ้นบทความให้สักที มีโน่นนี่นั่นให้ทำตลอด จนเริ่มกลับมาสอนอีกรอบ (หลังจากเข้ากลีบเมฆไป 2 ปีเพื่อเรียนต่อ)  ก็ต้องอาศัยการเอาภาพที่ capture หน้าจอมาให้ดูกัน รู้สึกว่าลำบากเหลือเกิน บางทีอยากอินดี้เดินไปแต่ตัวเพื่อสอน ( หลัง ๆ ทั้ง tools และ souce code และพ้องเพื่อนสื่อการสอน ผมทิ้งไว้ที่เว็บและ cloud ทั้งสิ้น)  แต่ก็ไม่วายที่จะต้องใช้บางส่วน อย่างเช่น git เป็นต้น

วันนี้ถือโอกาสเอาขึ้นให้ซะเลย กะแปะทิ้งลิงค์ให้เลยล่วงหน้ากับกลุ่มใหม่ที่จะเจอกันในสัปดาห์นี้เลย เวิ่นเว่อมาก็เยอะ ขอเข้าเรื่องเลยละกันนะ  ปล.ผมจะไม่อ้างอิงข้อมูลใด ๆ มากนักนะ ขออธิบายตามประสบการณ์การใช้งานนี่แหละ (ขอลองแบบนี้บ้าง)

Git คืออะไร 

ไม่รู้จะพูดไงดี เอาเป็นว่าขอตั้งคำถามละกันนะ ถ้าเราเคยทำงานกันเยอะ ๆ เป็นทีม

  • มีปัญหาในการเขียนโค๊ดกันหรือเปล่า
  • แบ่งงานกันยังไง
  • ควบคุมการทำงานกันยังไง
  • เราแก้ปัญหาการเขียนยังไง
  • ถ้าหากโค๊ดตีกันเราจะรู้ได้ไงมันเกิดปัญหาตอนไหน

เป็นต้น ถ้าพวกเราเคยเจอปัญหานี้ นี่แหละครับ git นี่แหละคือคำตอบ เพราะตัว git เองจะเป็นตัวควบคุมระบบให้ทั้งหมด ว่าใครเขียนอะไร เวลาไหน ช่วงไหน เวลาเราเจอปัญหาต่าง ๆ มันจะคอยเป็นทั้งเพื่อนเตือนเรา และคอยเป็นคนเก็บข้อมูลเป็นชั้น ๆ (reversion) ให้เราอัตโนมัติ

Git มันมีดีอะไร

ยังครับ นอกจากจะจัดการความยุ่งยากในการทำงานกันเป็นทีมให้เราแล้ว ยังไม่พอมันต้องมีดีกว่านี้อีก เราเคยเจอปัญหาเหล่านี้หรือไม่

  • เมื่อเขียนโค๊ดเสร็จแล้วเวลาจะเอาไปให้ลูกค้าหรือใช้งานกับลูกค้าจำนวนมหาศาลหรือเปล่า
  • เราใช้วิธีการอย่างไร  ftp ขึ้น server ลูกค้าอยู่อีกหรือไม่ แล้วถ้าจำนวนที่จะติดตั้งหรือเอาไปใช้งาน มีจำนวนเยอะ ๆ เช่น 100 เครื่องยังไหวหรือเปล่า
  • เราเคยเขียนโค๊ดในเครื่องแล้ว วันนำเสนอข้อมูล เครื่องดันมีปัญหาหรือเปล่า

จริง ๆ มีเยอะกว่านี้นะ แต่เอาแต่ 3 รายการนี้ก็แล้วกัน ถ้าเราเจอแบบนั้นเราจะทำอย่างไร คำตอบคือกุมหัวแน่นอน จริงไหม ? ถ้าหากเราใช้ Git นอกจากมันจะช่วย tracking (ว่าจะไม่พูดแล้วเชียว มาจนได้ ขอละกันคิดคำไทยไม่ทัน) ให้เราว่าใครทำอะไร แต่ช่วงเวลาแล้ว มันสามารถ backup หรืองา่ย ๆ ว่า มันสามารถเก็บข้อมูลให้เราทุกครั้งที่เราต้องการ ( commit) เพราะฉะนั้นเราไม่พอใจการเขียนวันนี้ กลับไปเมื่อวานก็ยังได้ และประเด็นสำคัญ!!!!!!!! ม๊ากมาก เพื่อแก้ปัญหาทั้ง 3 รายการคำถามข้างต้น เราสามารถติดตั้ง source code เรา 100 เครื่องในเวลาเดียวกันได้สบาย ๆ แบบไม่ต้องพก source code ติดตั้งแม้แต่ byte เดียว

Git ดี ๆ มีให้ใช้

ถามว่าไม่ต้องพกมันจะติดตั้งได้ไงไอ้ทิด ( ติดมาจากสุพรรณ) โม้หรือเปล่า  ขอตอบว่าเปล่าครับ ทุกวันนี้ผมเขียนโค๊ดมันก็วิ่งไปเก็บบน cloud ให้เลย เดินทางไปที่อื่นก็สามารถเดินไปตัวเปล่า แล้วไปดึงโค๊ดลงไปติดตั้งได้แบบสบาย ๆ  และมีที่เก็บ git  (จริง ๆ จะเรียกยาว ๆ ว่า git repository ก็ได้นะ หรือสั้น ๆ ว่า git repo หรือสั้นกว่านั้นอีกก็คือ repo (เยอะไปนะ))  ที่ไหนบ้าง  ปัจจุบันผมใช้งานอยู่ 2 ที่ครับ

  • Bitbucket   ข้อดีของที่นี้คือ สร้าง git repository ได้แบบ unlimit ไม่จำกัด แต่ข้อเสียคือจำกัดจำนวนผู้ร่วมพัฒนาทุกโครงการไม่เกิน 5 ท่าน  เช่น โปรเจ็ค A ผมทำกับเพื่อ่น 3 คน คือ นาย ก , นาย ข และนาย ค    โปรเจ็ค B ผมทำกับ นาย ง   เพราะฉะนั้นผมมีผู้ร่วมชะตากรรมครบ 5 ท่านแล้ว ไม่สามารถดึง นาย จ เข้ามาได้ทั้งโปรเจ็ค A,B  (ปล.นับรวมตัวผมเองด้วย)  อันนี้คงไม่งงเนอะ
  • Github  ข้อดีคือคุณจะมากี่ท่าน กี่โครงการสบาย ๆ ไม่ต้องกังวล แต่มีข้อแม้(ข้อเสีย)ว่าโค๊ดคุณต้องเปิดเป็นสาธารณะ  แต่!!!!! คุณสามารถให้เป็นแบบ private (ไม่เปิดเผย) ได้นะ แต่ต้องเสียเงิน ^^

Git มันทำงานยังไง

เอาแบบนี้ละกันครับ (เริ่มขี้เกียขพิมพ์ละ ฮา ๆ)

  1. เริ่มแรกให้สร้าง repo ไว้ซะ  ( ใครก็ได้ในทีม )
  2. ทุกคน clone ข้อมูลลงมาในแต่ละเครื่อง
  3. ทำการ pull ข้อมูลล่าสุดใน repo ลงมาในเครื่องของแต่ละคน
  4. เขียนโค๊ดตามหน้าที่ของแต่ละคน (จะคนละเวลาก็ได้)
  5. แต่ละคนเขียนเสร็จต้องทำการ note สิ่งที่ทำลงไปทุกครั้ง ( commit )
  6. ทำการ pull ข้อมูลปัจจุบัน ซึ่งก็คือ source code ของพ้องเพื่่อนและก่อนหน้านี้อะแหละ  (ป้องกัน conflict ได้) ลงมาอีกครั้งเพื่อความชัวร์ มันจะมารวมกับของใหม่ที่เราเขียนแล้ว commit ไป
  7. ทำการ push ข้อมูลโค๊ดของเดิมที่ pull ลงมา + กับของเราขึ้นไปอัพเดตล่าสุด
  8. เราก็จะได้ reversion มาเป็นตัวเลขอันหนึ่ง

หน้าตาจะประมาณนี้เมื่อทำเสร็จทุกขึ้นตอน

2014-12-18_11-36-57

Git Trick 

คือข้อมูลที่เราจะเอาขึ้นไปไว้ใน repo นั้นใช่ว่าจะต้องเอาขึ้นไปทั้งหมดที่เราเขียนนะ มาสามารถเลือกได้ว่า จะเอาไฟล์ไหล์ โฟลเดอร์ไหนขึ้นไปไว้  และอันไหนที่ไม่ปลอดภัยก็ไม่ควรจะเอาขึ้น

อันไหนที่ไม่ควรเอาขึ้นไป

– asset ทั้งหลายทั้งปวง (กรณีที่เป็น framework ) เพราะเครื่องคนที่พัฒนาแต่ละคนมันก็จะสร้างมาให้ใหม่อยู่แล้ว

– อะไรที่เกี่ยวข้องกับ user & pass

– อะไรที่เป็นเทคนิคด้านความปลอดภัยของ server

สุดท้ายแล้วถ้าเราทำแบบนี้เราก็จะได้ repo เล็ก ๆ เอาไว้ใช้งานตามสมควรแล้วล่ะ

สุดท้าย

ก็หวังว่าคงจะเป็นข้อมูลให้พิจารณาการใช้งานกันนะครับ อยากจะบอกว่าเลิกได้แล้ว FTP ขึ้น server ช้าก็ช้า น่าเบื่อก็น่าเบื่อ รอก็นานแสนนาน server มีให้เลือกหลากหลาย สภาพแวดล้อมไม่เหมือนกัน ชีวิต FTP ลำบากนะ บอกเลย แว็บบบ