มือใหม่ใช้ Source Control แบบ “วร้ายๆ”

จำเป็นมั้ย ที่ต้องใช้ Source Control ?
. .​ .​ ใช้เถ๊อะ ไหว้ล่ะ เพราะมันง่ายมากๆ โปรแกรมเมอร์ต้องใช้ให้ติดเป็นนิสัย

เราลองนึกเล่นๆว่าถ้าเรานั่งเขียน code มาทั้งวัน เพิ่มนั้นเพิ่มนี้ไปเยอะแยะ แล้วเกิดมีคนมาบอกว่าอยากได้ code เก่าของเมื่อเช้า ของเมื่อวาน ของเดือนที่แล้ว เราจะทำยังไง … เอ่อออ เอิ่มมมมม control + Z รัวๆหรอ บ้าแล้ววว

นั้นแหละ จึงเป็นที่มาของบทความนี้ เหมาะมากสำหรับคนที่เขียนโปรแกรม แต่ไม่เคยใช้มันมาก่อน

Source Control หรือ Version Control
อธิบายง่ายๆ มันก็คือสิ่งที่ใช้ในการจัดเก็บไฟล์ไว้เป็น version เมื่อมีการแก้ไขเปลี่ยนแปลง code
ต่อไปใครอยากได้ code version ไหนก็ไม่ยากแล้ว
มักจะติดปากเรียกกันว่า git สั้นๆก็ได้ (ไม่พูดเยอะ เจ็บคอ)

Source Control ที่จะแนะนำให้เริ่มใช้ก็คือ GitHub

1. จะต้องมี account GitHub ซะก่อน ถ้ายังไม่มีก็ไม่สมัครได้ที่ GitHub จากนั้นให้ login เข้าไป

2. ให้กดปุ่ม start project หรือ new repository จากนั้นให้ตั้งชื่อตาม project และ description ตามที่เราต้องการ

ตัวอย่างชื่อ repository และ description

3. เลือกว่าโปรเจคที่เราสร้างนั้นจะเป็นแบบ public หรือ private

4. กดเลือกสร้างไฟล์ README ไฟล์นี้มีไว้เพื่อเขียนอธิบายโปรเจคหรือ information ต่างๆ ในกรณีที่โปรเจคนั้นมีความซับซ้อนในการติดตั้งครั้งแรก

จากนั้นกด create repository ได้เลย

5. จากนั้นให้ทำการ clone repository ลงมา

แต่ในที่นี้จะขอยกตัวอย่างเป็นการสร้างโปรเจค iOS โดยใช้ Xcode นะครับ ก่อนอื่นต้อง add account GitHub เข้ามาใน Xcode ก่อน เข้าไปที่ xcode>preferences>accounts

สามารถกด clone ได้จากเมนูด้านบนของ Xcode

หรือหน้าแรกตอนเปิด Xcode มา

6. หลังจากที่ clone เสร็จแล้วให้ไปสร้าง project ใหม่ไว้ใน folder นั้น หรือถ้ามีโปรเจคของเก่าที่ยังไม่ได้ใช้ source control ก็สามารถ copy file ทั้งหมดที่มีไปไว้ในนั้นได้เลย

จะเห็นสัญญาลักษณ์ที่ท้ายชื่อไฟล์ ซึ่ง A หมายถึง Added และ M
หมายถึง Modified ซึ่งแสดงว่า โปรเจคนั้นๆมี source control แล้ว หรือจะเรียกว่า git ก็ได้


ในที่สุดก็มาถึงขั้นตอนการใช้ git สักที ซึ่งจะมีคำสั่งหลักๆอยู่สามอันคือ

  1. Commit มันก็คือการบันทึกงานนั้นแหละ แล้วแต่ละครั้งที่ commit ก็จะต้องบอกด้วยว่าเราทำอะไรไปบ้างใน version นี้ และให้พยายามเขียนอธิบายให้เกี่ยวข้องและให้อ่านแล้วเข้าใจมากที่สุด แนะนำให้แบ่งการ commit เป็นเรื่องย่อยๆ
เมนู commit ใน xcode

ให้เราทำการ commit ครั้งแรกโดยการติ๊กทุกไฟล์ที่เราต้องการและใส่คำอธิบาย

จากนั้นกด Commit Files เป็นอันเรียบร้อย

file status หายไปแล้ว กลายเป็น version ล่าสุดที่ไม่มีการเปลี่ยนแปลงอะไร
ตอนนี้ code version นี้จะอยู่ที่เครื่องเราเท่านั้นเรียกว่า local repository (เครื่องเรา) ซึ่งในการ commit แต่ละครั้งไม่จำเป็นต้อง update ไปที่ remote repository (ที่ GitHub)

2. Push คือการเอา code version ที่อยู่ที่ local update ไปที่ remote ซึ่งมีไว้สำหรับการที่เราอยากเผยแพร่ code ที่เรา commit ไว้ที่ local ให้คนอื่นหรือเพื่อนร่วมงานได้เห็น และยังทำให้เราสามารถ clone งานลงมาทำในคอมเครื่องอื่นๆได้ทุกที่ทุกเวลาแล้ว หมดยุคการเซฟงานใส่ thumb drive แล้วนะครับ นี่มันยุค 4.0

กด push ถ้าสำเร็จแล้วให้ลองกลับไปเช็คดูในเว็บ GitHub ของเรา

เรียบบบบ …

3. Pull คือการดึง code commit ล่าสุดที่ remote ลงมาที่ local มักใช้ในกรณีมีเพื่อนร่วมงาน update code ขึ้นไปที่ remote แล้ว ถ้าเราต้องการ code ชุดนั้นก็ให้ทำการ pull มาซะ หรือเช็ดจากการ Fetch ก็ได้


สามารถดู history ของ git ใน Xcode ได้ที่ tab show the source control navigator

แล้วถ้าเราต้องการจะใช้ code เก่าให้เราทำการ checkout ไปที่ commit นั้นๆ

ยกตัวอย่าง checkout ไปที่ 93ba0d8
กด Keep Xcode Version ได้เลยนะ

และสามารถกลับมาที่ commit ล่าสุดของเครื่องเราได้โดย checkout ที่ master


จบแล้วววว เย้ เอาแค่นี้ก่อนละกันเนาะ จะได้ไม่หนักจนเกินไป เพราะต้องการเน้นให้คนที่ไม่เคย git ใช้ได้ลองใช้คำสั่งอย่างง่ายๆก่อน … จริงๆคนเขียนเหนื่อยละ ฮ่าๆ

แต่เดี๋ยวผมจะเขียนสอนอย่างละเอียดและใช้ git ผ่านโปรแกรมอื่นๆที่น่าสนใจอีกแน่นอน เพราะ Xcode มันยังทำได้ไม่ค่อยดี ใครที่ยังไม่กด follow กดไว้ได้เลยนะครับรับรองไม่มีผิดหวัง ฮ่าๆ ขอขายของหน่อย

หวังว่าบทความนี้จะสามารถทำให้เข้าใจหลักการใช้ source control หรือ git ไม่มากก็น้อย เห็นมั้ยล่ะครับ หัดใช้ source control ง่ายนิดเดียว แต่ยากเยอะ ฮ่าๆ หยอกๆ
ต่อไปก็ส่ง code ให้เพื่อนแบบ “วร้ายๆ” ยุค 4.0 ได้แล้ว

สามารถเข้าไปโหลด project มาลองดูเล่นๆได้ที่นี่ Demo


ส่วนใครอยากลองใช้ git ใน xcode อย่างละเอียดให้เข้าไปดูได้ในนี้เลยนะครับ

และขอแนะนำบทความดีๆเกี่ยวกับ git อ่านแล้วสนุกดีครับ ^^