[Git] Introduction to Git & Github


Git เป็น Version Control  Systems ตัวนึง ที่ได้รับความนิยมในขณะนี้

ข้อมูลมาจากเล่มนี้ และคำบอกเล่า คำแนะนำของพี่ๆ ในวันแรกที่ฝึกงานที่ Opendream
http://progit.org/book/th/ch1-1.html

อ่านรายละเอียดจากหนังสือเล่มนี้นะครับ ... ผมจะบอกว่ามันใช้อย่างไรมากกว่ารายละเอียด

อะไรคือ VCS (Version Control Systems) เป็นระบบซึ่งทำการจัดเก็บการเปลี่ยนแปลง
ไฟล์ หรือ ไฟล์หลายๆ ไฟล์ ในที่นี้ผมจะพูดถึง ไฟล์ที่เป็น Source Code โปรแกรมนะครับ
แต่ให้คุณรู้ไว้ว่า "ไฟล์จะเป็นไฟล์อะไรได้ บน Computer ก็ใช้ Version Control ได้ทั้งหมด"
ในความรู้สึกผม มันคือการที่เราบริหารจัดการไฟล์ของเรา ในเวลาที่ร่วมทำงานกับผู้อื่น เช่น เราคือ A ตอนนี้ทำ Project X ร่วมกับนาย B และเราต้องการแก้โค้ดส่วนนี้ ถ้าใช้การส่งไฟล์กันไปมา แบบเมื่อก่อน ไฟล์เราจะมีไฟล์ต้นฉบับแค่ไฟล์เดียว ถ้าเกิดเข้าใจไม่ตรงกัน แล้วเริ่มแก้ด้วยไฟล์ ไฟล์เดียว อาจจะทำให้มีปัญหาเกิดขึ้นได้   
Git มาช่วยเรา ตรงที่ เราจะพัฒนา Feature นี้ใช่ไหม ก็แตกกิ่งออกมาแล้วพัฒนาไป โดยที่ไม่ส่งผลกระทบต่อไฟล์หลัก เผื่อเกิด Bug ขึ้นมา ไฟล์หลักก็จะไม่เจ๊ง ถ้าพัฒนาแล้วเจ๊งจริงๆ ก็แค่ลบไฟล์นั้น แล้ว pull Version ที่มันยังไม่เจ๊ง มาทำงานต่อได้ และคุณสมบัติในย้อนกลับมาที่เวอร์ชั่นใดก็ได้ของไฟล์ทำให้เราสามารถทดลองอะไรก็ได้ที่อยากทำ ถ้ามันเจ๊งคุณก็แค่ย้อนกลับมา แค่นั้นเองครับ :)
เราสามารถจะเลือกใช้ในแบบของ GUI (Sourcetree, Tortoise) ก็ได้ หรือ Command Line ก็ได้นะครับ
ซึ่งใน Blog นี้ ผมจะกล่าวถึงแต่ "Command Line Interface (Unix)" เท่านั้นนะครับ ...
แต่ใช้หลักการเดียวกันหมดครับ เรื่องคำสั่ง หรือการใช้งานคงต้องศึกษากันเอง

ขั้นแรกเราก็ต้องลง Git บนเครื่องก่อน ไปที่นี่ครับ
http://git-scm.com/
การติดตั้งจากหนังสือเล่มที่ให้ไป -> http://progit.org/book/th/ch1-4.html

เมื่อลงเสร็จแล้ว เปิด Terminal พิมพ์ git ก็จะได้ตามภาพ

Config Setting ต่างๆ ของ Git บนเครื่องของคุณซะก่อน
http://progit.org/book/th/ch1-5.html

4 ขั้นตอนที่เราจะทำบน Git
  1. clone หรือ pull ไฟล์ลงมาทำต่อ หรือเริ่มงานใหม่
  2. ทำงานเพิ่ม หรือแก้ไขไฟล์บน working directory
  3. stage ไฟล์ เพื่อให้ git ทำ snapshot ของ version ต่างๆ ใน stage area
  4. commit ไฟล์เพื่อทำบันทึกการอัพเดท Version ของไฟล์
  5. push ไฟล์ขึ้น online repository service เช่น github เพื่อทำงานเป็นทีมหรือแชร์ไฟล์ (optional)
คำสั่งพื้นฐานใน Git

http://progit.org/book/th/ch2-1.html
ให้อ่านบนที่ 2 จนจบนะครับ จะมีคำสั่งพื้นฐานบอกทั้งหมดเลย

ขอสรุปดังนี้
** สิ่งที่อยู่ใน [ ] หมายความว่า จะเป็นอะไรก็ได้ [สักอย่าง]

$ git init -- สร้าง .git ใน working directory ของคุณ
$ git add [filename] -- stage file ที่ต้องการ (ต้องทำการ stage ก่อน commit ทุกครั้ง)
$ git add . -- stage file ทั้งหมดใน working directory
$ git commit -m '[message]' -- บันทึกเวอร์ชั่นของไฟล์
$ git clone [url] -- clone repository จาก url ที่ต้องการ 
$ git status -- ตรวจสอบสถานะของไฟล์ใน working directory
$ git diff -- แสดงผลการเปลี่ยนแปลงในไฟล์ 
$ git rm [filename] -- จะใช้ในการลบไฟล์ พร้อมให้ git ทำการ untracked ไฟล์นั้นๆ ด้วย
$ git mv [file_name] [to_file_name] -- ใช้ในการเปลี่ยนชื่อไฟล์ที่ต้องการ
$ git log [extension such as --since=2.weeks] -- ใช้การดู version ไฟล์ทั้งหมด
$ git commit --amend :: ถ้า commit ไปแล้วอยาก add file ไปที่ commit เดียวกัน
$ git checkout -- [filename หรือ .] ยกเลิกการกระทำกับไฟล์ที่ยังไม่ได้ stage  
$ git reset --hard HEAD~[x] ย้อนเวอร์ชั่นไป x เวอร์ชั่นก่อนหน้านี้
การใช้ Remote 
และการทำงานกับ Online Repository บน Github.com

ขั้นตอนแรกก็ต้องสมัครสมาชิกก่อนนะ --> http://www.github.com

สมัครเสร็จก็ไปสร้าง Repository บน Github ซะ


เมื่อสร้างเสร็จแล้ว ก็มีจะหน้า Instruction เพื่อให้เราทำตาม ...



ถ้าครั้งแรก เราจะทำตาม Next Step ก่อน ...
ขั้นตอนก็คือ
  1. สร้าง Folder ชื่อเดียวกับ Repository ที่สร้างไว้บน Github 
  2. เข้าไปแล้วทำการสร้างไฟล์อะไรสักอย่าง ในที่นี้เค้าใช้ touch คือการสร้างไฟล์ปล่าว
  3. สร้าง git โดยใช้ git init
  4. ทำการ stage ไฟล์เมื่อสักครู่ ด้วยคำสั่ง add
  5. จากนั้น commit ไฟล์ เพื่อพร้อมที่จะอัพขึ้นสู่ Online Repository
  6. Remote Origin ของ Online Repository ที่เราสร้างขึ้น (ใช้ link ตามนั้นเลย)
  7. ทำการ push (ส่ง) ไฟล์ขึ้นไปยัง Online Repository ของเรา
พอจะทำครั้งที่ 2 ขึ้นไป ก็จะทำแค่ใน Existing Git Repo ? ซึ่ง Origin สามารถที่จะเพิ่มได้อีกนะ

$ git remote add origin [originURL] -- add url สำหรับ online repository
$ git push [option ex. -u] origin master -- ส่งไฟล์ไปยัง online repository
** -u หมายถึงให้จำ online repository นี้ไว้เป็น default เมื่อ push ครั้งหน้าถ้าเป็นที่นี่ก็ใช้ git push ก็พอ
ในเบื้องต้นของการทำงานกับ Remote Repository รู้แค่นี้ก็พอ

คำสั่งเพิ่มเติมเมื่อต้องทำงานกับ
Remote Repository และ Branching
  • git branch [branch_name] เป็นการแตกกิ่งออกไป เพื่อที่จะให้ไม่กระทบกับไฟล์หลัก
  • git remote add [remote_repo_name] [remote_repo_url] -- เพิ่ม Online Repository เพื่อส่งไฟล์ขึ้นไป ตอนที่ push
  • git push [remote_repo_name] [branch_name] -- อัพเดท branch ที่กำลังพัฒนาอยู่ ไปยัง Online Repository
  • git checkout [branch_name] -- เลือก branch ที่ต้องจะไปทำการแก้ไขไฟล์
  • git merge [branch_name] -- รวม branch ที่เลือก กับ branch ปัจจุบันที่กำลัง checkout อยู่ 
ตัวอย่าง Pattern ที่เอา git มาใช้ [ในที่นี้คือ gitflow]
โดย master จะเป็น branch หลักในการพัฒนา Software [branch นี้ต้องไม่มีอะไรผิดพลาด ไม่มี Bug]
และจะมี branch อื่นๆ อีก เช่น 
branch dev คือ branch ที่เอาไว้พัฒนา เขียนโค้ด 
branch hotfixes คือ เมื่อเจอ Bug ที่ master ต้องดึงมาแก้ที่ branch นี้ [ไม่กระทบกับที่พัฒนาอยู่]




Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น