Git คืออะไร
Git คือ Version Control แบบ Distributed เป็นระบบที่ใช้จัดเก็บและควบคุมการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์ชนิดใดก็ได้ ไม่ว่าจะเป็น Text File หรือ Binary File โดยจัดเก็บไฟล์เข้าไปในระบบของ Git (Git Repository) ซึ่งเก็บสำรองข้อมูลการเปลี่ยนแปลง Source Code ทำให้สามารถย้อนกลับไปที่เวอร์ชั่นก่อนหน้าได้ และสามารถดูรายละเอียดการเปลี่ยนแปลงของแต่ละเวอร์ชั่น รวมทั้งดูได้ว่าใครเป็นคนแก้ไข
โดย Git จะเก็บบันทึกการเปลี่ยนแปลงของ Source Code เวอร์ชั่นล่าสุดไว้ที่ Local Repository ซึ่งทำงานโดยที่ไม่ต้องต่อกับอินเตอร์เน็ต และเมื่อต้อง Update การเปลี่ยนแปลงของ Source Code เวอร์ชั่นล่าสุดให้กับเพื่อนร่วมทีมก็สามารถที่จะ Push ขึ้นไปเก็บที่ Remote Repository(Git Hosting) และเพื่อนร่วมทีมก็สามารถ Pull เวอร์ชั้นล่าสุดนั้นมารวม(Auto Merge) ที่เครื่องของเขาเอง ทำให้ Source Code ที่พัฒนาร่วมกันกับคนภายในทีมเป็นเวอร์ชั่นล่าสุดเสมอ
Git Hosting (Remote Repository) คืออะไร
Git Hosting คือ บริการฝาก Repository ไว้บน Server ทำให้ง่ายในการใช้งาน Git และสะดวกในการพัฒนาร่วมกันกับคนภายในทีม โดย Git Hosting ที่นิยมใช้มีดังนี้
1. GitHub
GitHub เป็น development platform ที่เอาไว้แบ่งปัน source-code ของเราให้กับคนภายในทีม ไม่ว่าจะเป็น co-workers, classmates, teammates หรือไม่ว่าใครก็ตาม รองรับทั้ง open-source และ business คุณสามารถ host, review code, manage projects และสามารถ build software ได้แม้ตัวมันเองจะไม่มี build-in เหมือนเจ้าอื่น ๆ แต่ก็มีทูลอีกมากที่ทำมารองรับ
มีบริษัทนำ GitHub ไปทำสำหรับ Business และ Organization ทั้ง Enterprise Cloud และ Enterprise Server เช่น airbnb, NetFlix, Medium, IBM, SAP, PayPal, Spotify, Bloomberg, StackShare
2. GitLab
GitLab เป็น Git repository management และเป็น Open-Source เจ้าเดียวที่ถูกนำมาเทียบ สามารถทำ Code reviews, Issue tracking, activity feeds และ wikis ได้
จุดเด่นที่เด่นมาก ๆ เลยคือ Built-in CI/CD และ มี issue board มาตั้งแต่ Free repository บริษัท ที่นำ GitLab ทำ Organization เช่น Nasa, ING, SONY, EA, Citrix, SIEMENS
3. Bitbucket
Bitbucket นอกจากเป็น Git repository management แล้วยังสามารถ plan project, collaborate code test และ deploy ได้ โดยที่ทุก Project สามารถตั้ง Private Git repositories ได้โดยไม่ต้องเสียเงิน
ตัว Bitbucket เป็นผลิตภัณท์ของ Atlassian ซึ่งเป็นบริษัทที่ทำ Trello จึงง่ายในการนำมา Integration, built-in CI/CD บริษัทที่นำ Bitbucket มาใช้ เช่น PayPal, Salesforce, CicleCI, Starbucks, Tesla Motors, Bitbucket, Pandora
Git-GUI Client คืออะไร
Git-GUI Client คือ software ที่ติดตั้งบนเครื่องนักพัฒนา โดยใช้เชื่อมต่อกับ Git Hosting เพื่อให้การใช้งานคำสั่งต่างๆ ของ Git ง่ายขึ้น เหมาะสำหรับคนที่ไม่ชอบใช้ Git Command Line
1. SourceTree Platforms: Mac, Windows Price: Free
2. TortoiseGit Platforms: Windows Price: Free
3. GitKraken Platforms: Linux, Mac, Windows Price: Free / $29 / $49
คำสั่ง Git เบื่องต้นมีอะไรบ้าง
- Git Config ใช้แสดงและกำหนดข้อมูลของผู้ใช้เพื่อระบุตัวตน และคุณสมบัติอื่นๆ ของ Git
- Git Init ใช้สร้างระบบของ Git ขึ้นมาภายใต้โฟลเดอร์หรือ Path นั้น โดยจะสร้างโฟลเดอร์ .git ขึ้นมาเพื่อใช้เก็บ สำรองข้อมูล การเปลี่ยนแปลงและคุณสมบัติอื่นๆ ของ Git
- Git Status ใช้ตรวจสองสถานะของ Source Code ในระบบของ Git
- Git Add ใช้เพิ่มการเปลี่ยนแปลงของ Source Code เข้าไปที่สถานะ Staged
- Git Remote ใช้เริ่มต้นทำงานกับ Git Hosting (Remote Repository) โดยเพิ่ม URL ของ Remote Repository เข้าไปยังคุณสมบัติของ Git
- Git Clone ใช้ดึงประวัติทั้งหมดของ Project นั้นๆ บน Git Hosting (Remote Repository) ของเพื่อนร่วมทีม ของคนอื่นหรือของเราเองที่มีอยู่แล้วบน Git Hosting มาที่เครื่องของเรา โดยจะได้ประวัติเดิมของ Repository มาด้วย ทำให้เราเริ่มพัฒนาต่อจากตรงจุดนี้ได้เลย คำสั่ง Git Clone นั้นจะ Checkout Branch หลักมาเป็น Master และดึง Tag ลงมาทั้งหมด
- Git Commit ใช้ยืนยัน Source Code ที่อยู่ในสถานะ Staged เข้าไปเก็บไว้ที่ Local Repository
- Git Push ใช้ส่งการเปลี่ยนแปลงของ Source Code ที่เก็บอยู่บน Local Repository ขึ้นไปยัง Git Hosting (Remote Repository)
- Git Checkout ใช้ในการสลับ Working Directory ไปยัง Branch หรือ Commit ที่เราระบุ คำสั่งนี้ยังสามารถให้งานได้ในอีกหลายๆ แบบ
- Git Fetch เป็นคำสั่งที่ใช้รับการเปลี่ยนแปลงของ Source Code ล่าสุดที่อยู่บน Git Hosting (Remote Repository) ลงมายัง Local Repository แต่ยังไม่ได้ทำการรวม Source Code (Merge)
- Git Merge ใช้ในการรวม Branch หรือ Commit ทั้งสองเข้าด้วยกัน ตัวอย่างเราจะอยู่ที่ Branch Master และต้องการ Merge Branch Feature เข้ามาทำงานร่วมด้วย
- Git Pull (fetch + merge) เป็นคำสั่งที่ใช้รับการเปลี่ยนแปลงของ Source Code ล่าสุดที่อยู่บน Git Hosting (Remote Repository) ลงมายัง Local Repository และทำการ Auto Merge
- Git Log ใช้แสดงประวัติของ Commit ที่เก็บไว้ใน Repository
- Git Branch ใช้ในแสดงและแตงกิ่งสาขาในการพัฒนา ซึ่งทำให้การพัฒนาซอฟต์แวร์มีความยืดยุ่นมากขึ้น เรื่องของ Branch และ Tag นั้นมีความเกี่ยวข้องกับเรื่องของ Release Process ของการพัฒนาซอฟต์แวร์ ขึ้นอยู่กับการตกลงกันภายในทีมและรูปแบบที่เหมาะสมกับซอฟต์แวร์ที่กำลังพัฒนา ซึ่งเรียกเทคนิคนี้ว่า Branch Strategy (Git Workflow, Branching Models, Branching Workflow, Git Flow)
- Git Tag ใช้แสดงและสร้าง Tag ขึ้นที่จุด commit นั้น เรื่องของ Branch และ Tag นั้นมีความเกี่ยวข้องกับเรื่องของ Release Process ของการพัฒนาซอฟต์แวร์ ส่วนใหญ่แล้วการตั้งชื่อ Tag จะตรงกับเลขเวอร์ชั้นของซอฟต์แวร์ที่ Release, Deploy, หรือที่ส่งให้กับลูกค้า เช่น v1.12.4 (v.x.y.z) [4]
v คือบอกว่าเป็นเวอร์ชั่นอะไร
x คือ Major เวอร์ชั่น
y คือ Minor เวอร์ชั่น
z คือ Patch เวอร์ชั้น
ส่วนข้อความภายใน Tag จะนิยมระบุ Date, Release to, New Feature?, Fix Bug?
- Git Reset ใช้ย้อนกลับไปที่เวอร์ชั่นก่อนหน้า โดยระบุ Branch หรือ Commit Id
- Git Ignore ไม่ได้เป็นคำสั่งแต่เป็นคุณสมบัติของ Git โดยการเพิ่มไฟล์ที่ชื่อ .gitignore เข้าไปในระบบของ Git เพื่อทำการบอกให้ Git ไม่ต้องสนใจไฟล์หรือโฟลเดอร์นั้นๆ
- Git Clean ใช้แสดงและลบ Source Code ที่อยู่ในสถานะ Untracked ออกจาก Working Directory
- Git Diff ใช้แสดงความเปลี่ยนแปลงระหว่าง Working Directory ที่กำลังทำงานอยู่กับ Branch หรือ Commit Id ที่ระบุ
- Git Stash ใช้ซ่อนการเปลี่ยนแปลงใน Working Directory ทำให้ Working Directory Clean นิยมใช้ก่อนคำสั่ง Git Pull
- Git Reflog ใช้แสดงและจัดการกับ Reference Log ของ Git Repository