มือใหม่ Github…วิธีง่ายๆในการเก็บ code
สำหรับ Blog นี้ผมจะมาสรุปวิธีในการเก็บ code ฉบับง่ายๆกระชับ ไม่ต้องใช้คำสั่งอะไรยุ่งยาก ก่อนอื่นเลยเมื่อ Developer ได้พัฒนาแอฟเสร็จแล้วจะต้องมีพื้นที่ในการเก็บ code นะครับ เพื่อความปลอดภัยและคอนโทรลได้ง่าย
- ไปสมัคร Github ก่อนเลยครับ
- เมื่อสมัครเสร็จเรียบร้อยแล้ว ให้สร้าง Repository ของตัวเองขึ้นมาโดยไปที่ New
3. กำหนด Repository name, Public or Private, License etc. ก่อนที่จะกด Create repository นะคับ ตามรูปด้านล่างเลย
4. ตอนนี้เราจะได้ Repo มาล่ะคับ หน้าตาประมาณนี้
5. ขั้นตอนต่อไปให้เราไป copy URL สำหรับ Git โดยเลือกแบบ Clone with HTTPS ตามรูปเลยนะครับ
6. ให้มา click ขวา ที่ folder code ของเรา และเลือก Git bash here หลังจากนั้นให้พิมพ์ git clone <วาง url จากข้อ 6 ตะกี้นะ>
จะได้ folder มาใหม่เพิ่มอันนึงดังในรูปเลย <Floder Test นั่นแหละคับ>
ให้เข้าไป copy ข้อมูลทั้งหมดออกมาจาก Folder Test จะประกอบด้วย .git, LICENSE, README.md และมาวางใน Folder งานหลักเรา จากนั้นก็ลบ folder Test ไปได้เลย (จะได้ผลลัพธ์ดังรูปข้างล่างแบบนี้นะ)
7. จากนั้นให้พิมพ์ git status ใน git bash จะพบว่า git มองเห็นไฟล์ต่างๆล่ะนะ(เชื่อมกันได้แล้ว) ที่เป็นสีแดงนั่นแหละ
8. ให้พิมพ์ git add . เพื่อเป็นการ tracking ทั้งหมดในโฟลเดอร์นั้นๆ หลังจากนั้นให้พิมพ์ git status อีกครั้ง จะพบว่าไฟล์ต่างๆเปลี่ยนเป็นสีเขียวหมดแล้ว
9. ต่อมาให้ทำการ commit code โดยพิมพ์ git commit -m “First time to commit” โดยข้อความใน “” ให้ระบุสิ่งที่เราได้แก้ไขเข้าไปนะคับ เพื่อจะได้จำได้
10. หลังจาก commit แล้ว คราวนี้ให้เรา push code ขึ้นไปเลย โดยพิมพ์ git push แค่นี้แหละคับ เพราะเรา clone มาตอนแรก ฉะนั้นจึงไม่ต้องกำหนด remote หรือ master ใดๆเลยนั่นเอง
เรียบร้อยแล้ว คราวนี้ใน Github เรา ก้อจะมี code เพิ่มขึ้นมาอัตโนมัติเลยนะ
(ถ้าไม่ขึ้นลอง refresh browser ครั้งนึงครับ)
11. เพิ่มเติมนิดนึงนะคับ ถ้าต้องการให้แสดงรูปใน README.md ให้ใช้ Format นี้ในการเขียนนะคับ แต่ต้องมีรูปเข้าไปใน repo เราด้วย แต่เพิ่ม


สรุป:
จะพบว่าเราใช้คำสั่ง Git ไม่กี่คำสั่งเองนะ ก็สามารถเก็บ code ได้แล้ว นั่นคือ
- git status
- git clone
- git add .
- git commit -m “message you want to save”
- git push
# เพิ่มเติมคับ ในการทำ file.md สำหรับโชว์ใน Repo เราสามารถเข้าไปทดสอบทำได้ที่ https://stackedit.io/ นะครับ หน้าจอจเป็นแบบนี้คือแยกให้เห็นซ้ายและขวา โดยซ้ายคือ Syntax และขวาคือ หน้าจอที่จะแสดงขึ้นจริงๆ
################ End ###############
Appendix: git command for reference.
- git init : เป็นการสั่งให้โฟลเดอร์นี้เริ่มใช้ Git (Git จะสร้างโฟลเดอร์ไว้ที่ /.git เป็น hidden folder)
- git add FILENAME : เป็นการเริ่มต้นสั่งให้ Git ทำการ tracking ไฟล์นั้นๆ
- git add -A . : เป็นการสั่ง tracking ทั้งหมด โดย . (dot) หมายถึงโฟลเดอร์นั้นๆ และ -A หมายถึงรวมไฟล์ที่ถูกลบด้วย
- git status : เอาไว้ดูสถานะของ Git ว่าเป็นอย่างไร เช่น มีไฟล์อะไรที่ทำการแก้ไข เพิ่ม/ลบ หรือไม่
- get reset FILENAME : คือการลบไฟล์ออกจากสถานะ stage
- git commit -m "message": เป็นการ commit ไฟล์ทั้งหมดในสถานะ stage ไปเซฟไว้ใน Git เป็น snapshot
- git log : คือการดูประวัติ Git ต่างๆที่เราเคยทำไว้
- git stash : คือการเซฟและซ่อนโปรเจ็คของเราไว้ สามารถที่จะ restore กลับได้ทุกเมื่อ
- git clone GIT_URL : ทำการ clone Git ตาม URL ที่กำหนด มาไว้ที่เครื่อง
- git remote add origin REMOTE_URL : คือการเพิ่ม Remote Repository สำหรับ push Git ไปยัง Server
- git push -u origin master : เป็นการ push โปรเจ็คจากเครื่อง local ไปเก็บไว้ที่ Server (ครั้งแรกต้องบอก origin master ด้วย แต่ครั้งต่อไปสามารถสั่งคำสั่งสั้นๆได้แบบนี้ git push
- git pull origin master : เป็นการเช็คการเปลี่ยนแปลงของ repository จาก server เทียบกับ local (นึกถึงถ้าโปรเจ็คเราพัฒนากันหลายคน แล้วมีคนนึง push patch ใหม่ลงไป เราก็จะเห็น)
- git fetch : เป็นการสั่งเช็คการเปลี่ยนแปลง ว่ามีอะไรเปลี่ยนแปลงบ้าง แต่ไม่ได้ทำอะไร เช็คอย่างเดียว
- git merge : เป็นการรวมการเปลี่ยนแปลง หลังจาก git fetch แล้ว
- git pull : มีค่าเท่ากับ git fetch + git merge
- git diff HEAD : เช็คการเปลี่ยนแปลงในโปรเจ็ค เทียบกับ HEAD : commit ล่าสุด
- git reset FILENAME : ทำการลบไฟล์ออกจาก staging (unstaged) ไม่ได้ลบไฟล์ออกจาโฟลเดอร์นะ
- git checkout --<target> : ทำการเปลี่ยนกลับไปครั้งล่าสุดที่ทำการ commit
- git branch NAME : หมายถึงการสร้าง branch ใหม่ชื่อ NAME
- git checkout NAME : หมายถึงการเปลี่ยน branch ไปยัง branch ชื่อ NAME (branch default คือ master)
- git checkout -b NAME : หมายถึงการสร้าง branch ชื่อ NAME พร้อมกับ เปลี่ยน branch ไปยัง NAME เลย (รวบรัด 2 คำสั่งด้านบน)
- git rm FILENAME : ลบไฟล์ออกจา Git (ออกจากตัวโปรเจ็คด้วย) เวลา commit ครั้งต่อไป ก็จะไม่มีไฟล์ที่ลบ (ต่างจากการลบด้วยระบบ หากเราทำการ commit ไฟล์ก็ยังอยู่ใน Git)
- git branch -d NAME : คำสั่งเหมือนการสร้าง branch แต่ว่ามี -d หมายถึง การลบ branch ที่ชื่อ NAME (ไม่สามารถใช้ -d กับ branch ที่ยังไม่ได้ merge ได้ ต้องใช้ -D หมายถึง -d -f หรื –force นั่นเอง)
- git merge NAME : เป็นการรวมไฟล์ จาก branch ที่ชื่อว่า NAME
- Repository : คือ โฟลเดอร์หรือโปรเจ็คที่มี Git อยู่
- staged : คือ ไฟล์ที่พร้อมจะ commit (บอกกับ Git ว่าเราพร้อมที่จะ commit แล้วนะ)
- unstaged : คือ ไฟล์ที่มีการเปลี่ยนแปลงแต่ว่ายังไม่พร้อมที่จะ commit
- untracked : คือ ไฟล์ที่ยังไม่ได้ถูก track โดย Git (โดยเฉพาะการสร้างไฟล์ใหม่ ต้องใช้ git add FILENAME เพื่อให้ Git ทำการ track ไฟล์นั้นๆ)
- deleted : คือ ไฟล์ที่ถูกลบออกจากโปรเจ็ค และรอที่จะลบออกจาก Git (ข้อดีคือหากเราพลาดลบไฟล์ไป ก็ยังกู้คืนได้ เพราะ Git ได้ track ทุกๆไฟล์ของเราไว้)
- HEAD : คือ pointer ที่เก็บทุกๆ commit ของเรา โดยปกติแล้ว HEAD จะชี้ไปที่ commit ล่าสุด reference ของ HEAD จะอยู่ในรูปแบบ SHA
- branch : เหมาะสำหรับการทำโปรเจ็ค ที่มีหลายๆ features ก็ทำการแยก branch ออกมา เช่น branch-dev, branch-release เป็นต้น
- merge : คือการรวมไฟล์ จาก branch หนึ่งกับอีก branch หนึ่งเข้าด้วยกัน
- merge conflict คือ เกิดกรณีที่มีการแก้ไขไฟล์เดียวกัน เวลาเดียวกัน Git จะไม่รู้ว่าเราควรจะใช้ไฟล์ไหนดี
############### End again #############