Git คือ? Github คือ?

khunPleum
5 min readApr 30, 2019

--

เคยได้ยินแว้บๆอะนาย เริ่มยังไง? ใช้ยังไง?

ก่อนทั้งหมดทั้งมวล ถ้าท่านเข้ามาอ่านBlogนี้ ท่านน่าจะไม่รู้จักสิ่งๆนี้จริงๆ หรือ
‘เคยได้ยินผ่านไป-ผ่านมาบ้าง’ ไม่เป็นไรฮะ เริ่มกันเลย!

ตามนิยามWikipedia มันคือ..

Git is a distributed version-control system for tracking changes in source code during software development. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, non-linear workflows.”

(ก็อปวางกันเลยทีเดียว)
“ยังไม่เห็นภาพอะปลื้ม”
(เสียงอื้ออึงลอยมา)

เล่าแบบนี้ครับ เราต้องมีความเชื่อว่าก่อนว่า

“ โปรแกรมเกิดขึ้นมาเพื่อแก้ปัญหาอะไรบางอย่าง~”

Git มันก็เป็นแค่โปรแกรมๆหนึ่ง ที่มาแก้ปัญหาบางอย่างเหมือนกัน
ใครเคยเจออะไรแบบนี้บ้าง
-ผ่านไป 2–3 วัน ลืม!! ว่าอันไหนตัวล่าสุดที่พร้อมใช้

โค้ดล่าสุดล่าสุด2
  • ยังต้องใช้flash drive ก็อปงานกันอยู่หรือเปล่า
Flash drive is useful.
  • แบ่งงานทำกับเพื่อนพอถึงเวลารวมไฟล์นี่ ช็อค!! อันนู้นขาด อันนี้ขาด ไปๆมาๆ กลายเป็นทำงานคนเดียวเฉย (หลังจากนั้นปัญหาการเมืองจะเริ่มมา)
  • เพื่อนได้ไฟล์ไม่ล่าสุดไป เพราะแก้เพิ่มนิดหน่อย
  • ต้องส่งแล้วไฟล์หาย! คอมเปิดไม่ติด! ซวยไปปปป~
โมโห

ปัญหาดังกล่าวจะหมดไปเมื่อใช้ Version control อย่าง Git git git git…~ (มีเอคโค่ด้วยนะ)

ติดตั้ง(Install) กันก่อน
เข้าlinkนี้ ไปโหลดมา (Blogนี้ ใช้windows)
Windows link
Linux link
OSX link

Install git v2.21.0

เรียบร้อย จะได้Icon หน้าตาแบบนี้เรียกว่าา “Git bash” เปิดขึ้นมาเลย

Git bash

หน้าตาเหมือนcmdเลย ท่านไหนยังงงๆอยู่ ปลื้มขออธิบายเพิ่มนะ

ท่านใดรู้จักterminal/cmd/command line แล้วเลื่อนลงเลยจ้าา

Command line

การสั่งให้คอมพิวเตอร์ทำงาน ไม่ว่าจะเปิดไฟล์ เปิดเพลง แก้ไฟล์ ฯลฯ ทำนู่นนนี่นั่น.. ปัจจุบันเราก็คลิ๊กๆ เอาใช่ไหมล่ะ แต่เมื่อก่อนคอมพิวเตอร์ใช้คีย์บอร์ดสั่งนะ! มันโตมาจากการใช้คีย์บอร์ดผ่านหน้าต่างขาว-ดำแบบนี้

อุปกรณ์ที่เรียกว่า “เมาส์” ถูกคิดขึ้นมาทีหลังด้วยแนวความคิดว่า

“ทำไมจะทำอะไรต้องพิมพ์ตลอดเลยนะ เอาอะไรสักอย่างชี้ๆ คลิ๊กๆ ที่มันใช้ง่ายๆกว่านี้ไม่ได้หรอ”

เกิดเป็น เมาส์+คีย์บอร์ด
หมายเหตุ: จริงๆแล้วก่อนหน้าคีย์บอร์ดก็มีนะ ต้องย้อนกลับไปช่วงสงครามโลกแบบ คอมพิวเตอร์ใหญ่ๆ(ที่ใช้หลักการของSwitch 0/1 หรือLogic gate หลายๆตัวมาต่อกัน ทำให้สามารถคำนวณได้เร็วกว่ามนุษย์) สามารถไปหาอ่านความเป็นมาได้ มีคนทำสรุปไว้เยอะมากๆ หรือดูหนังเรื่องนี้ก็ได้หนังช่วงสงคราม

ความพยายามถอดรหัสEnigma ของนาซี

เอาล่ะพอเท่านี้ก่อนเริ่มเยอะยาวก่อนจะกลายเป็นBlog ประวัติศาสตร์คอมพิวเตอร์
กลับไปเรื่องGit เถอะ

ที่เล่ามายาวคือกำลังบอกว่า..

“เราสามารถพิมพ์ command line ผ่านgit bash ได้นะและเรากำลังจะใช้git โดยใช้command line เพียวๆ”

(แอบกระซิบว่า มันมีgui คลิ๊กๆเอาด้วยแหละ อิอิ)

เช็คก่อนซิ ว่าเราติดตั้งเรียบร้อยไหม?

เรียบร้อยแหะ

Config พื้นบ้านกันก่อน

git config — global user.name “Prayut”
git config — global user.email “prayut45@email.com

เข้าไปFolderของเรา

git init
git init
hidden folder

git init สร้าง ‘.git’ แบบhidden folderขึ้นมา เพื่อใช้เก็บการเปลี่ยนแปลงและคุณสมบัติอื่นๆ ของ Git

ผมจำลองว่านี่คือ code ของผม
สร้างไฟล์ชื่อ ‘codena.txt’

codena.txt

ข้างในมีcode แบบนี้

code ข้างใน
สั่ง git status เพื่อดูสถานะไฟล์ ‘codena.txt’
git status

Untracked(แดง) = ยังไม่ได้trackเข้าgit

git add

สั่ง git add <ชื่อไฟล์>’ เพื่อadd มันเข้าสู่Stage เตรียมcommit

git status อีกรอบ

git add & git status

Staged(เขียว) = เพิ่มเรียบร้อยเตรียม commit

สั่ง git commit -m <ข้อความ>
git commit -m ‘I add my name, grade and my university’

การcommit คือการยืนยันว่าเราแน่ใจแล้วนะที่จะเอาแบบนี้ พร้อมแปะสรุปสั้นๆ ถึงสิ่งที่เราทำลงไป เป็นอันเรียบร้อย

สั่ง git log ดูการกระทำของตัวเองซะ!!
git log

git logจะบอกหมดว่า ใครทำอะไร/เมื่อไหร่/commitที่เท่าไหร่ (commitที่ 2c63.. )

ปลื้มบอกว่า ปลื้มลืมใส่อายุตัวเอง (ใส่แปป)

I’m 21 years old
git status ดูหน่อย
อ้าวว แดง??

สีแดง ไม่ใช่ Untrack แต่คือmodified = มีการแก้ไขเกิดขึ้น! แก้อะไรไปนะ
เราแก้อะไรไปนะ!?

สั่ง ‘git diff’ ดูการเปลี่ยนแปลงข้างในซิ

git diff

ฮั่นแน่!! มีการเพิ่มอายุเข้าไปแล้วเป็นไปตามแผนที่เราต้องการ
จัดการcommitซะ

git add codena.txt
git status
git commit -m ‘I just add my age’

สั่ง git log ดูซิ~
สวยงาม

สรุปสั้นๆมี 3 status
Untrack(แดง): ยังไม่ได้แท็กไฟล์นั้น
Staged(เขียว): ขึ้นstage up แล้วเตรียมcommit
Modified(แดง): มีการแก้ของข้างในเกิดขึ้น

Github

github.com

Github พูดแบบบ้านๆ เว็บไซต์สำหรับฝากcode (ฝากของหน่อย)

github ก็คือgit เวอร์ชั่นเว็ปไซต์ออนไลน์ผ่านอินเตอร์เน็ตเลยแหละ สามารถฝากcodeหรือที่เขาเรียกกันว่า “Repository” ได้เลย

Local Repository = เครื่องเรา
Remote Repository = Github, Gitlab, Bitbucket

เริ่มฝากของกัน!!
1) สมัครAccount ให้เรียบร้อย
2) New

3)Set ชื่ออะไรให้เรียบร้อย

4)สร้างrepositoryเสร็จแล้ว

ทีนี้เราจะเอาprojectA ของเราไปฝากไว้ที่github (รับน้าาาา~)

5) copy link ของRepositoryนี้มา (มีแบบSSH/HTTPS)

สำหรับSSHต้องConfig key ก่อน Configuring SSH Key for Github

git@github.com:tammarut/projectA.git

6) เพิ่มurl ที่จะเอาของไปฝากลงไป

สั่ง git remote add origin <url>
สั่ง git remote -v เช็คซิเรียบร้อยไหม

7) เอาของขึ้นไปซะ

สั่ง git push -u origin master

(แค่ครั้งแรก =>ครั้งต่อไป ‘git push’)

git push -u origin master
จิ้ม F5 สักที

สำหรับlink แบบSSH/HTTPS นั้นแตกต่างกันเล็กน้อย
SSH: ต้องนำkey public(id_rsa) ไปsetในGithubก่อน
Configuring SSH Key for Github

HTTPS: ไม่ต้องเซ็ตได้เลย เพียงแต่ต้องใส่password ทุกครั้งที่push

SSH

คนในทีมอยากทำprojectด้วย ให้คนในทีมลงgit ให้เรียบร้อย

สั่ง git clone <url>
git clone <url>

เพื่อนแก้ไฟล์อะไรบางอย่างแล้วpush ขึ้นไปแล้ว

git fetch = ดูการเปลี่ยนแปลงหน่อยสิมีไฟล์ไหนเปลี่ยนไปบ้าง แต่ยังไม่โหลดลงมารวมกับที่มีในเครื่องเราgit merge = เอาลงมารวมกับlocalอัพเดทเป็นล่าสุด
git fetch & git merge

หรือ

สั่ง git pull คือ all in one =>fetchและmerge ให้เลยจ้าา
git pull

Tip: git fetch นิ่งไปแบบนี้แปลว่าไม่มีอะไรเปลี่ยนแปลง/ Already up to date. ทุกอย่างเป็นล่าสุดอยู่แล้ว

เป็นBlogหนึ่งที่ยาวมากๆ(รูปเยอะ) เลยขอตัดไว้เพียงเท่านี้ก่อน เพราะว่าจริงๆ แล้วยังมีอีกหลายfunctionที่ไม่ได้กล่าว git GUI, branch, Fork, Tag, Ignore, Conflict, ย้อนcommit และอื่นๆที่ปลื้มยังไม่รู้อีกมาก ถ้าใครอ่านมาถึงตรงนี้แล้ว..

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

แหล่งฟาร์มเพิ่มเติม

--

--

Written by khunPleum

✎..Senior student 『Computer-Engineering』 at Panyapiwat Institute of Management(PIM). Now I’m interested in programming

No responses yet