[Visual Studio] แนะนำการทำ Version Control ด้วย Git

Git เป็นหนึ่งใน Version Control ที่ได้รับความนิยมอย่างมากในปัจจุบัน สำหรับการทำ Version Control กับงานที่พัฒนาด้วย Visual Studio นั้น ทาง Microsoft ได้เพิ่มความสามารถให้ใช้งานร่วมกับ Git ได้ตั้งแต่ Visual Studio 2013 และได้ออก Plug-in สำหรับ Visual Studio 2012 ด้วย ซึ่งจะสามารถใช้งานได้กับ Visual Studio 2012 Update 3 ขึ้นไป

Git+VB.NET

ส่วนการใช้งานกับ Visual Studio เวอร์ชั่นเก่ากว่านี้ สามารถใช้งานร่วมกับ Git Extensions ซึ่งรองรับ Visual Studio ตั้งแต่ 2005 ขึ้นไป และ Git Source Control Provider ซึ่งรองรับ Visual Studio ตั้งแต่ 2008 ขึ้นไป

สำหรับบทความตอนนี้ ขอแนะนำการใช้งาน Git ร่วมกับ Visual Studio เฉพาะการใช้งานกับ Visual Studio 2013 เท่านั้น โดยจะใช้ Visual Studio 2013 Update 4 นะครับ

แต่คิดว่าสำหรับ Visual Studio 2012 Update 3 ขึ้นไป ที่ลง Plug-in ก็สามารถทำงานได้เช่นเดียวกัน

ใครที่ใช้ Version เก่า อย่าเพิ่งน้อยใจ รอติดตามตอนต่อไปนะ

 

List of contents

 

Setting

สำหรับการตั้งค่าให้ Git บน Visual Studio 2013 ให้เป็น Source Control (Version Control นั่นแหล่ะ) นั้น ให้ไปที่เมนู TOOLS (1) > Options… (2)

Visual Studio 2013 Options menu
Visual Studio 2013 Options menu

ก็จะพบกับ Options dialog ให้เลือกไปที่เมนู Source Control > Plug-in Selection (1) แล้วเลือก Current source control plug-in เป็น Microsoft Git Provider (2) แล้วตอบ OK ไป

Visual Studio 2013 Options dialog
Visual Studio 2013 Options dialog

สำหรับการใช้งาน Git นั้น จะอยู่ในหน้าต่างที่ชื่อว่า Team Explorer (3) โดยสามารถเปิดมันขึ้นมาได้จากเมนู VIEW (1) > Team Explorer (2)

Visual Studio 2013 Team Explorer menu
Visual Studio 2013 Team Explorer menu

บนหน้าต่าง Team Explorer นั้น แถบบนสุดจะเป็น Toolbar menu มี Back, Next, Home, Connect to Team Projects, Refresh และ Search bar ตามลำดับ

หากคลิกที่ Connect to Team Projects จะกลับมายังหน้าดังรูปด้านล่าง

ส่วนตรงหมายเลข (1) เลือกคลิก จะมีเมนูขึ้นมาให้เลือก ซึ่งเป็นเมนูเดียวกับเมื่อเรากดปุ่ม Home (จะพูดถึงทีหลัง)

ส่วนหมายเลข (2) หากคลิกเข้าไป จะเป็นการเลือก Team Project จาก Team Foundation Server (เป็นหนึ่งใน Source Control ของ Microsoft) สำหรับใช้งานกับ Git ตรงนี้ไม่ได้ใช้งาน

สำหรับหมายเลข (3) คือส่วนที่แสดง Local Git Repositories ต่าง ๆ ที่เคยเปิดบน Visual Studio แล้ว (จากรูปจะยังไม่มีแสดงอยู่) และมีเมนูย่อย ๆ คือ New, Add, Clone ให้เราจัดการ Repo ได้จากตรงนี้เลย

Visual Studio 2013 Team Explorer windows
Visual Studio 2013 Team Explorer window

เมื่อเรากดปุ่มเมนู Home (รูปบ้าน) จะมีตัวเลือกสำหรับ Git ด้วยกัน 4 เมนู คือ Changes, Branches, Unsynced Commits และ Settings

เมนู Home บน Team Explorer windows
เมนู Home บน Team Explorer window

ในเมนู Settings จะมีเมนู Git Settings ให้เลือกอีกที

Settings บน Team Explorer windows
Settings บน Team Explorer window

สำหรับ Git Settings หลัก ๆ จะใช้กำหนด User Name และ Email ของเรา ซึ่งจะถูกใช้ตอนเรา Commit นั่นเอง ซึ่งการกำหนดตรงนี้ จะเป็นการกำหนดที่ Global Config ของ Git นะครับ

Git Settings บน Team Explorer windows
Git Settings บน Team Explorer window

ถ้าหากเครื่องที่ใช้งาน เคยใช้ Git มาก่อนแล้ว มี Git Config เดิมอยู่แล้ว ก็จะเป็น Config เดียวกันนั่นเอง

 

Git for new project

สำหรับการสร้าง Project ใหม่บน Visual Studio แล้วจะทำ Version Control ด้วย ตอน New Project ให้ติ๊กถูกตรง Add to source control ดังรูป

Visual Studio 2013 New Project dialog
Visual Studio 2013 New Project dialog

เมื่อ Visual Studio สร้าง Project ให้เสร็จ จะมี Choose Source Control Dialog ขึ้นมาให้เลือก ก็เลือกไปที่ Git (1) แล้วตอบ OK (2)

Visual Studio 2013 Choose Source Control dialog
Visual Studio 2013 Choose Source Control dialog

สังเกตุที่หน้าต่าง Output จะเห็นว่ามีการสร้าง Git Repository ให้ พร้อมเปิดมันขึ้นมา…

Visual Studio 2013 Output windows
Visual Studio 2013 Output window

ในหน้าต่าง Team Explorer ส่วนของ Local Git จะแสดงรายการ Repository ที่เพิ่งสร้างขึ้นมาให้

Visual Studio 2013 Team Explorer windows แสดง Local Git Repositories
Visual Studio 2013 Team Explorer window แสดง Local Git Repositories

เมื่อดับเบิ้ลคลิกไปที่ Repo จะแสดงรายการ Solution ที่อยู่ใน Repo ซึ่งเราสามารถดับเบิ้ลคลิกที่ Solution เพื่อเปิดมันขึ้นมาได้เลย

เมนู Home บน Team Explorer windows แสดง Solution ที่อยู่ใน Repository
เมนู Home บน Team Explorer window แสดง Solution ที่อยู่ใน Repository

 

Git for exist project

สำหรับ Visual Studio Project เดิม ที่เคยสร้างไว้อยู่ก่อนแล้ว สามารถนำเข้า Git ได้โดยคลิกขวาที่ชื่อ Solution (1) ใน Solution Explorer แล้วเลือก Add Solution to Source Control… (2)

เมนู Add Solution to Source Control บน Solution Explorer
เมนู Add Solution to Source Control บน Solution Explorer

ก็จะพบกับ Choose Source Control Dialog ขึ้นมาให้เลือก เหมือนกับตอนสร้าง Project เลย… ก็เลือกไปที่ Git (1) แล้วตอบ OK (2)

Visual Studio 2013 Choose Source Control dialog
Visual Studio 2013 Choose Source Control dialog

เป็นอันเรียบร้อย… เหมือนกับหัวข้อที่แล้วแล้วล่ะ (ขี้เกียจอธิบายซ้ำ )

 

Changes

บน Solution Explorer จะแสดงสถานะของไฟล์ด้วย จากรูปด้านล่าง คือสถานะเพิ่มไฟล์ใหม่, ไฟล์ที่ Commit แล้ว และไฟล์ที่ถูกแก้ไขหลัง Commit ตามลำดับ

Solution Explorer แสดงสถานะไฟล์บน Icon
Solution Explorer แสดงสถานะไฟล์บน Icon
Solution Explorer แสดงสถานะไฟล์บน Icon
Solution Explorer แสดงสถานะไฟล์บน Icon
Solution Explorer แสดงสถานะไฟล์บน Icon
Solution Explorer แสดงสถานะไฟล์บน Icon

เมื่อเข้าไปที่เมนู Changes บนหน้าต่าง Team Explorer จะแสดงผลดังรูปด้านล่าง

ในจุดที่ (1) เราสามารถเปลี่ยน Branch ได้จากการคลิกที่ชื่อ Branch ถัดลงมาคือช่อง Commit message ส่วนปุ่ม Commit จะมีตัวเลือกได้อีกจากลูกศรลงด้านข้าง ว่าจะ Commit อย่างเดียว, Commit and Push หรือจะ Commit and Sync

จุดที่ (2) แสดงรายการไฟล์ที่เกิดการเปลี่ยนแปลงและพร้อมที่จะนำไป Commit (Staged Change นั่นเอง) เมื่อเรามีการแก้ไขไฟล์ใด ๆ จะถูกนำเข้ามาอยู่ในส่วนนี้ทันที ส่วนจุดที่ (3) จะเป็นส่วนที่จะไม่นำไป Commit ในครั้งนี้ (Unstaged Change) และจุดที่ (4) คือไฟล์ที่ไม่ได้เพิ่มเข้าสู่ Git หรือสถานะ Untracked นั่นเอง

เราสามารถคลิกเลือกไฟล์ แล้วลากข้ามไปมา เพื่อเปลี่ยนสถานะก่อนที่จะ Commit ได้เลย สะดวกดี

Changes บน Team Explorer windows
Changes บน Team Explorer window

เมื่อทำการ Commit แล้ว จะแสดงให้เห็นดังรูปด้านล่าง

Changes บน Team Explorer windows เมื่อ Commit แล้ว
Changes บน Team Explorer window เมื่อ Commit แล้ว

เราสามารถดูประวัติการ Commit ได้ โดยคลิกที่ Actions (1) ข้าง ๆ ปุ่ม Commit แล้วเลือก View History… (2)

เมนู View History บน Team Explorer windows
เมนู View History บน Team Explorer window

ก็จะแสดงประวัติการ Commit ดังรูปด้านล่าง สามารถนำ Cursor ไปชี้เพื่อดูรายละเอียดของ Commit ในแต่ละจุดได้

History window
History window

หากดับเบิ้ลคลิกที่ Commit ใด ๆ บน History จะแสดงรายละเอียดบนหน้าต่าง Team Explorer

Commit Details บน Team Explorer window
Commit Details บน Team Explorer window

และไฟล์ที่มีการแก้ไข เราสามารถคลิกขวาที่ไฟล์ บน Solution Explorer หรือ Team Explorer ก็ได้ จะมีเมนู Compare with Unmodified… ให้เลือก

เมนู Compare with Unmodified... บน Team Explorer window
เมนู Compare with Unmodified… บน Team Explorer window

ก็จะแสดงหน้าต่าง Diff เปรียบเทียบไฟล์ที่เลือก โดยฝั่งซ้ายจะเป็นส่วนของ HEAD หรือจากใน Repo ที่เรา Commit ไปแล้ว ส่วนฝั่งขวาจะเป็นไฟล์ปัจจุบันที่มีการแก้ไข และด้านขวา จะมีรางแสดงส่วนของ Code ที่แสดงผลอยู่ พร้อมทั้งสีเพื่อบอกสถานะส่วนที่แก้ไข

Diff window
Diff window

 

Branches

สำหรับเมนู Branches บนหน้าต่าง Team Explorer นั้น จะมีเครื่องมือให้เราจัดการ Branch โดยในจุดที่ (1) จะแสดง Branch ปัจจุบัน สามารถสร้าง Branch ใหม่ด้วยเมนู New Branch และสามารถ Merge Branch ได้จากที่นี่

ส่วนในจุดที่ (2) Published Branches หรือ Branch ที่อยู่บน Remote Repository แล้ว และจุดที่ (3) Unpublished Branches ก็คือ Branch ที่ยังไม่ได้ Push ขึ้น Remote Repository หรือ Local Repository นั่นเอง

Branches บน Team Explorer window
Branches บน Team Explorer window

สำหรับการ Merge Branch นั้น เมื่อคลิกไปที่ Merge จะมีกรอบขยายลงมา ดังรูปด้านล่าง เราสามารถเลือกว่าจะ Merge Branch ไหน ไปยัง Branch ไหนได้เลย โดยไม่ต้องเปลี่ยนไปยัง Branch ปลายทาง

ตรงนี้ผมชอบมาก มันชัดเจนดี ไม่ทำให้สับสน และช่วยให้ผู้ใช้งาน Git ที่เป็นมือใหม่ ไม่พลาด

Merge Branch บน Team Explorer window
Merge Branch บน Team Explorer window

เมื่อ Merge เรียบร้อย และไม่มี Conflict ใด ๆ จะแสดงดังรูปด้านล่าง พร้อมทั้งเปลี่ยน Branch ปัจจุบัน ไปยัง Branch ปลายทางให้เลย

เมื่อ Merge Branch เรียบร้อย
เมื่อ Merge Branch เรียบร้อย

แต่ถ้าหากมี Conflict เกิดขึ้น จะมี Link ที่เขียนว่า Resolve the conflicts ให้คลิก

Merge Branch บน Team Explorer window
Merge Branch บน Team Explorer window
เมื่อ Merge Branch แล้วเกิด Conflict
เมื่อ Merge Branch แล้วเกิด Conflict

ใน Resolve Conflicts จะมีรายชื่อไฟล์ที่เกิด Conflicts แสดงอยู่ พร้อมสาเหตุ เมื่อคลิกที่ไฟล์ จะมีตัวเลือกให้เราจัดการกับ Conflict ที่เกิดขึ้นได้

Resolve Conflicts บน Team Explorer window
Resolve Conflicts บน Team Explorer window
Resolve Conflicts บน Team Explorer window
Resolve Conflicts บน Team Explorer window

หากคลิกไปที่ Compare Files จะแสดงหน้าต่าง Diff

จากรูปด้านล่าง ฝั่งซ้ายแสดง Code จาก Branch dev ส่วนฝั่งขวาแสดง Code จาก Branch master

Diff window
Diff window

หากคลิกไปที่ปุ่ม Merge จะแสดงหน้าต่าง Merge ขึ้นมา…

Resolve Conflicts บน Team Explorer window
Resolve Conflicts บน Team Explorer window
Merge window
Merge window

จากรูปด้านบน ในหน้าต่าง Merge จะแสดง Code จากทั้ง 2 Branch ในฝั่งซ้ายและขวา เราสามารถติ๊กถูกที่ด้านหน้าจุดที่เกิด Conflict โดยสามารถเลือกได้ว่าจะเอา Code จากฝั่งไหน หรือทั้งสองฝั่ง หรือไม่เอาเลยก็ได้ ส่วนด้านล่างจะเป็นการจำลองผลการ Merge

เมื่อเลือกได้แล้ว คลิกที่ปุ่ม Accept Merge ด้านบน ชื่อไฟล์ที่อยู่ในส่วนของ Conflicts ก็จะถูกย้ายอยู่ในส่วนของ Resolved แล้ว และเมื่อแก้ Conflict เรียบร้อยแล้ว จะมีปุ่ม Commit Merge ให้คลิก

Resolve Conflicts บน Team Explorer window
Resolve Conflicts บน Team Explorer window

ก็จะพาไปยังส่วนของ Change ให้เราใส่ Commit Message แล้วทำการ Commit ต่อไป

Changes บน Team Explorer window หลังจากสั่ง Commit Merge
Changes บน Team Explorer window หลังจากสั่ง Commit Merge

ด้านล่างเป็นหน้าต่าง History แสดงผลหลังจากทำการ Merge เรียบร้อยแล้ว

History window
History window

 

Unsynced Commits

เมนู Unsynced Commits ใช้สำหรับนำ Local Repository ของเรา ขึ้นไปเก็บไว้ที่ Remote Repository (Git Server) สำหรับตัวอย่างนี้ ผมเลือกใช้บริการของ GitHub.com ซึ่งให้บริการฟรี สำหรับ Public Repository

สำหรับการใช้งาน ให้ทำการสร้าง Repository เปล่า ๆ ไว้ที่ Remote Repository (ห้ามมี Commit ใด ๆ) แล้วนำ URL มาใส่ แล้วกดปุ่ม Publish ดังรูปด้านล่าง

Unsynced Commits บน Team Explorer window
Unsynced Commits บน Team Explorer window

ทำการยืนยันความเป็นเจ้าของ Remote Repository ด้วยการ Login ให้เรียบร้อย

Login Dialog สำหรับ Git Server
Login Dialog สำหรับ Git Server

เมื่อกำหนด Remote Repository เรียบร้อยแล้ว จะมีข้อความแจ้งดังรูปด้านล่าง โดย Branch ที่เราเลือกอยู่ในปัจจุบัน จะถูก Push ขึ้นไปที่ Server แล้ว และหน้า Unsynced Commits จะมีหน้าตาเปลี่ยนไป

โดยในส่วนที่ (1) จะใช้ทำการ Sync, Push, Pull ได้จากตรงนี้

จุดที่ (2) ส่วนของ Incoming Commits จะแสดงรายการ Commit ที่แตกต่างจาก Local Repository ของเรา โดยอัพเดตได้จากการ Fetch ส่วนจุดที่ (3) คือ Outgoing Commits จะแสดงรายการ Commit ที่เรายังไม่ได้ Push ขึ้น Server

Unsynced Commits บน Team Explorer window
Unsynced Commits บน Team Explorer window

สำหรับ Branch อื่น ๆ หากต้องการ Publish ขึ้น Server สามารถไปที่เมนู Branches ของหน้าต่าง Team Explorer แล้วคลิกขวา ที่ Branch ที่อยู่ในโซน Unpublished Branches แล้วเลือก Publish Branch ส่วนกรณี Branch ที่ Publish แล้ว สามารถเปลี่ยนเป็น Unpublish ได้เช่นกัน

เมนู Publish Branch
เมนู Publish Branch

รูปด้านล่าง เมื่อทำการ Publish Branch เรียบร้อย จะมีข้อความแจ้งให้ทราบ

Branches บน Team Explorer window
Branches บน Team Explorer window

สามารถเข้าไปดู Repository ที่ผม Push ไว้ได้ ที่ https://github.com/first087/VS2013-Test-Solution

 

สรุปนิดนึง… สำหรับ Git บน Visual Studio 2013 นั้น ยังมีฟีเจอร์ให้ใช้งานไม่ค่อยครบถ้วนนัก อย่างเช่นการติด Tag ยังไม่สามารถทำได้ การ Reset Branch ไปที่ Commit ต่าง ๆ ก็ยังทำไม่ได้ คาดว่าฟีเจอร์เหล่านี้ คงทะยอยอัพเดตเพิ่มเติมขึ้นมาใน Visual Studio 2013 Update ถัด ๆ ไป หรือ Version 2015 ไปเลย

สำหรับบทความแนะนำการทำ Version Control ด้วย Git บน Visual Studio 2013 ในตอนนี้ ก็ขอจบเพียงเท่านี้ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ Use Visual Studio with Git

สำหรับบทความตอนต่อไป… จะแนะนำการใช้งานกับ Visual Studio ใน Version เก่า ๆ นะคร๊าบบบบบบ รอหน่อยนะ…

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.