[Dev Tip] มาใช้ Git กันเถอะ เพื่อชีวิตที่ยืนยาว และยั่งยืน

เมื่อสักปีที่แล้วได้ ไม่รู้ว่าจำกันได้หรือเปล่าว่า เราเขียนบทความเรื่องของ Version Control ตอนนั้นก็เล่าไปว่า เจ้า Version Control มันคืออะไร และมันดียังไง ทำอะไรได้บ้างอะไรทำนองนั้น ถ้าอยากลองกลับไปอ่าน [ตามลิงค์นี้เลย][0] จะได้รู้ที่ว่าของมันสักหน่อย แต่สำหรับคนที่เคยอ่านมาแล้ว หรืออยากจะข้าม ๆ มันไป วันนี้เรามาดู Version Control แบบที่เป็นที่นิยมอย่าง Git กันดูดีกว่า ว่ามันคืออะไร และใช้งานยังไง

Git คืออะไร ?

Git เป็น Version Control ประเภทหนึ่ง (ย้ำนะว่าเป็น Sub Set ของ Version Control !!!) ที่เป็นระบบคอยเก็บความเปลี่ยนแปลงของไฟล์งานของเราเรื่อย ๆ ทำให้เราสามารถเรียกดูแต่ล่ะเวอร์ชั่นของไฟล์งานของเราได้อย่างง่ายดาย หรือดูได้แม้กระทั่งว่า แก้โดยใคร และเมื่อไหร่ได้อีกต่างหาก ลองนึกภาพเวลาเราทำงานเป็นทีมดูสิครับ มันจะวุ่นวายแค่ไหน ถ้าเราไม่ใช้ Version Control ความบรรลัยจะเกิดขึ้นแน่นอน เพราะต่างคนต่างแก้ไฟล์ที่อยู่ในเครื่องตนเอง และอีกคนก็ทำเช่นเดียวกันอีก ทำให้ไฟล์มั่วไปหมดเลย เพราะฉะนั้น การใช้ Version Control เป็นสิ่งที่ จำเป็น สำหรับการพัฒนาโปรแกรม ทั้งทำคนเดียว และเป็นทีมก็ตาม นะแจ๊ะ !

Installation

ก่อนที่เราจะใช้ Git ได้เราต้องทำการติดตั้งมันลงมาก่อน ถ้าเป็นฝั่ง Linux จะง่ายมาก ๆ เพียงแค่รันคำสั่งเพียงบรรทัดเดียวตามด้านล่างนี้ก็เรียบร้อยแล้ว

sudo apt-get install git-all

หรือถ้าเป็นในฝั่งของ OSX และ Windows ให้เข้าไป[ตามลิงค์นี้][2] เพื่อไปโหลด Installer มาและติดตั้งตามขั้นตอนกันได้เลย
หลังจากที่เราติดตั้งเสร็จเรียบร้อยแล้ว เราก็ต้องมา Config ตัว Username และ Password สำหรับการใช้ Git กันต่อ โดยการพิมพ์คำสั่งตามด้านล่างนี้ลงใน Terminal และเปลี่ยนเป็นชื่อและอีเมล์ของตัวเองได้เลย

git config --global user.name "NAME"
git config --global user.email "EMAIL"

Getting Started

ในวันนี้เราจะมาลองสร้าง โปรเจ็คแรกของเราง่าย ๆ เป็น Hello World โดยผมจะมี Folder นึงเก็บ Source Files ทั้งหมด โดยขั้นตอนแรก ให้เรา Change Directory ไปที่ Folder ที่เก็บ Source Files ก่อน และทำการสร้าง git repository โดยการพิมพ์คำสั่ง

git init

และเรายังสามารถเรียกคำสั่ง git status เพื่อทำการดูสถานะของโปรเจ็คเราได้ด้วย เช่น ตอนนี้ผมมี Source File อยู่ชื่อ main.c พอเรารัน git status ก็จะขึ้นดังนี้

On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
main.c
nothing added to commit but untracked files present (use "git add" to track)

โดยสิ่งที่มันจะบอกเราคือ ไฟล์ไหนอยู่ในสถานะไหนบ้าง (เรื่องของสถานะ เดี๋ยวจะอธิบายตอนล่าง ๆ)
โดยปกติ ถึงแม้ว่าจะมีไฟล์อยู่ใน Folder ของโปรเจ็คเรา แต่ Git มันก็ไม่ได้ถือว่าไฟล์นี้จะใช้นะ เราจะต้องทำการไปเพิ่มมันเข้ามา เพื่อสั่งใน git มันทำการตามดูไฟล์นั้น ๆ ว่ามีความเปลี่ยนแปลงอะไรบ้าง โดยการใช้คำสั่ง git add เช่นผมจะเอาไฟล์ main.c เข้ามา โดยการรันคำสั่ง

git add main.c

จากการรันคำสั่งด้านบน จะทำให้ main.c ถูกนำเข้ามาใน git project ของเราแล้ว เราสามารถลองดูผลได้จากการรัน git status อีกรอบ

On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file:   main.c

จะเห็นได้ว่า ในส่วนของ Untracked File ได้หายไปแล้ว เพราะเรา Add มันเข้ามาแล้วผ่าน git add ไปแล้วไง

ว่าด้วยเรื่องของ File State ใน Git

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

  • Untracked -> ไฟล์ที่ยังไม่ได้ Add เข้ามาใน Project
  • Unmodified -> ไฟล์ที่ยังไม่มีการแก้ไข
  • Modified -> ไฟล์ที่มีการแก้ไขแล้ว
  • Staged -> ไฟล์ที่พร้อมจะ Commit
    อ่านมาน่าจะ งง แน่ ๆ มันคืออะไร งง ไปหมดแน่นอน เพื่อทำให้คลายความ งง เราจะลองมาดูกันเป็นขั้นตอนกันเลยดีกว่า ก่อนอื่น เหมือนกับตอนแรกเลยที่เรามีไฟล์อยู่ใน Folder ของโปรเจ็คจริง ๆ นะแต่ตัว Git มันไม่ได้ยุ่งอะไรกับไฟล์นั้น ๆ เลย เราเรียกสถานะนี้ว่า Untracked
    หลังจากที่เรา Add มันเข้ามาใน Git ของเราแล้ว ไฟล์นั้นก็จะอยู่ในสถานะที่เรียกว่า Unmodified หรือไฟล์นั้น ๆ ยังไม่ได้ผ่านการแก้ใด ๆ ทั้งสิ้นแม้แต่ Space bar เดียวก็ไม่มีเปลี่ยนเลย จากนั้นพอเรา แก้ไขไฟล์นั้น ไฟล์นั้นก็จะมีการเปลี่ยนแปลง เราเลยเรียก State ที่มีการเปลี่ยนแปลงนั้นว่า Modified
    ทีนี้เกือบสุดท้ายล่ะ หลังจากที่เราแก้ไฟล์ไปแล้ว เราก็เซฟ ไฟล์นั้น ๆ ก็จะพร้อมแล้วที่จะถูก Upload ลงไปในใน Git ของเรา เราจะเรียก State ที่ไฟล์นั้นถูกแก้ไข และพร้อมที่จะ Upload ลงไปใน Git ว่า Staged

จากที่ได้เล่าไปเมื่อกี้ มันก็จะกลายมาเป็นภาพด้านบนนี้เลย นั้นคือเราใช้ git add มันเข้ามา แก้ไฟล์ และ commit มันกลับไป ถึงประโยคนี้อาจจะชะงักไปว่า "เฮ้ย !! Commit คืออะไรว่ะ ?" ต้องอธิบายว่า เราเรียกการบันทึกการเปลี่ยนแปลงของไฟล์เราลงใน Git เราจะเรียกมันว่าการ Commit หรือถ้าเราพูดตามภาพนี้มันก็คือ การที่ไฟล์นั้นเปลี่ยนจากสถานะ Staged มาเป็น Unmodified อีกครั้งนั่นเอง โดยเราสามารถ Commit ได้โดยการใช้คำสั่ง git commit เช่นผมได้ทำการแก้ไฟล์ main.c ไปแล้ว ตอนนี้ต้องการที่จะ commit มันลงไป ผมก็ต้องรันคำสั่งตามด้านล่างนี้

git commit -m "Hello Name"

วิธีการใช้คือ git commit -m "MESSAGE" โดย MESSAGE คือข้อความที่เราต้องบอกว่า เราได้ทำการแก้ไขอะไรไป คร่าว ๆ อ่านแล้วรู้เลยอะไรทำนองนั้น หลังจากที่เรารันคำสั่ง commit ไปแล้วมันก็จะตอบกลับมาว่า มีการ Commit ไปกี่ไฟล์ และเปลี่ยนกี่จุด อะไรทำนองนั้น
[master (root-commit) af7c65b] Hello Name
1 file changed, 7 insertions(+)
create mode 100644 main.c
และเราสามารถดูได้ด้วยนะว่า ไฟล์ก่อนการ Commit และหลัง Commit มีอะไรเพิ่ม หรือถูกลบตรงไหนบ้าง บรรทัดไหน ตัวไหน โดยการรันคำสั่ง git diff ได้เลย เช่น

git diff

และสิ่งที่ได้ออกมาคือ

diff --git a/main.c b/main.c
index 13846d8..9247a70 100644