Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Git Tag: การติดแท็กเพื่อจัดการเวอร์ชัน

Tagging เป็นฟีเจอร์สำหรับติดตามจุดเฉพาะในประวัติของ Git repository

เมื่อทำงานกับ Git repository นานๆ คุณจะทำการเปลี่ยนแปลงจำนวนมาก ใน Git ใช้ commits ติดตามการเปลี่ยนแปลงแต่ละครั้ง

แต่หากต้องการจับจุดเฉพาะในประวัติ repo เช่น version release จะใช้ฟีเจอร์ Git tagging

บทช่วยสอนนี้อธิบายพื้นฐาน tagging และการใช้คำสั่ง git tag จัดการ tags พร้อมตัวอย่าง จนจบคุณจะเชี่ยวชาญ tags ใน Git

Git Tagging คืออะไร?

Tags คือ references (refs) ที่ชี้ไปยังจุดเฉพาะในประวัติ Git repository

Tags ใช้โดยนักพัฒนาเพื่อจับจุดเฉพาะในประวัติ repo เพื่อสร้าง version release เช่น เมื่อพร้อมปล่อย version ใหม่ จะสร้าง tag สำหรับโปรเจกต์

โดยพื้นฐาน tags คือ branches ที่ไม่เปลี่ยนแปลง หลังสร้าง tag ไม่มี commits ใหม่เพิ่มในประวัติของ tag แต่ tag จะเก็บ snapshot ของ repository ตอนที่สร้าง tag

Git รองรับ 2 ประเภท tags:

  • Annotated tags: tags ที่เก็บเป็น full objects ใน Git database มี metadata เช่นชื่อผู้สร้าง email วันที่ และข้อความ tag
  • Lightweight tags: tags ที่เป็นแค่ชื่อและ pointer ไป commit ไม่มี metadata เพิ่ม

โดยทั่วไป Annotated tags นิยมกว่า เพราะ metadata มีประโยชน์ภายหลัง เช่น ติดตามว่าใครเป็นผู้ versioning

สร้าง Tag (Create a Tag)

ก่อนใช้งาน tags ต้องสร้าง tag ก่อน ไวยากรณ์:

git tag <name>

พารามิเตอร์ "name" คือชื่อ tag เช่น "v1.2" หรือ "beta-v0.9" Tag จะถูก apply ไปที่ current commit ที่คุณอยู่

Annotated Tags

Annotated tag เก็บ full object ใน Git database เมื่อสร้าง จะเก็บ metadata: ชื่อผู้สร้าง email วันที่สร้าง และข้อความ tag (tag message)

ไวยากรณ์สร้าง annotated tag:

git tag -a <name>

Flag -a บอก Git สร้าง annotated tag หลังรันคำสั่ง text editor จะเปิดให้พิมพ์ tag message (เพราะ annotated tags ต้องมี message)

หรือระบุ message โดยตรง:

git tag -a <name> -m <message>

Flag -m ใส่ message ให้ annotated tag ตัวอย่าง สร้าง tag v1.9 message "version 1.9":

git tag -a v1.9 -m "version 1.9"

คำสั่งนี้สะดวกกว่า เพราะไม่ต้องพิมพ์ message ใน text editor

Lightweight Tags

สร้าง lightweight tag ใช้ไวยากรณ์มาตรฐาน ตัวอย่าง สร้าง tag "v1.9.1":

git tag v1.9.1

คำสั่งนี้สร้าง lightweight tag v1.9.1 ไม่ต้องระบุ tag message จะสร้าง tag checksum ใหม่เก็บในโฟลเดอร์ .git ของโปรเจกต์

ดูรายการ Tags ของโปรเจกต์ (List a Project's Tags)

โปรเจกต์ใหญ่อาจมี tags หลาย version ใช้คำสั่ง:

git tag

คืนรายการ tags ตัวอย่าง:

v1.9.1
v1.9.0
v1.8.11
v1.8.10
v1.8.9
...

ใช้ flag -l กรอง tags เช่น ต้องการ tags เริ่มต้นด้วย "v1.8":

git tag -l v1.8*

เครื่องหมาย * (asterisk) หมายถึงตัวอักษรใดๆ หลัง "v1.8" ผลลัพธ์:

v1.8.11
v1.8.10
v1.8.9
v1.8.8
...

Checkout Tag (Checkout a Tag)

ใช้ git checkout ดูสถานะ repository ณ commit ที่มี tag นั้น สมมติอยากดู repo ตอน v1.1:

git checkout v1.1

คำสั่งนี้ย้าย repository ไปสถานะ "detached HEAD" หมายถึงการเปลี่ยนแปลงที่ทำจะไม่อัปเดต tagged version แต่จะสร้าง detached commit ใหม่ ไม่เกี่ยวข้องกับ branch ใดๆ หลังรันคำสั่ง จะเห็น codebase ตอน commit ที่ tag v1.1

ติด Tag ที่ Commit เก่า (Tag an Old Commit)

ตัวอย่างก่อนหน้า tag ที่ current commit (HEAD) แต่อาจ tag commit เก่าได้ โดยระบุ reference ของ commit นั้น

สมมติอยาก tag commit ล่าสุด ใช้ git log ดูรายการ commits:

git log --pretty=oneline

ผลลัพธ์ตัวอย่าง:

8cd29ae5d04abbdbd856d2c2f55f2b82133903e8 Push new logging feature
2911aae73ed1dd372bcdf8f520b174c3817c818b Initialize logging feature
9646aa785211f3069ce01177da98e23b7890d859 Fix issue #342

อยาก tag commit "Fix issue #342" เป็น "v1.3" ใช้คำสั่ง:

git tag -a v1.3 9646aa785211f3069ce01177da98e23b7890d859

คำสั่งเพิ่ม tag v1.3 ไปที่ commit ที่ระบุ (SHA hash ของ commit "Fix issue #342")

แทนที่ Tag เก่า (Replace Old Tag)

แต่ละ commit มี tag ได้เพียงหนึ่งอัน หากอยากแทนที่ tag เดิมด้วย tag ใหม่ ใช้ git tag พร้อม flag -f (force) เพื่อ override tag เดิม

สมมติอยากเพิ่ม tag "v1.3.1" ไป commit เดิม ถ้าไม่ใช้ -f จะ error ใช้คำสั่ง:

git tag -a -f v1.3.1 9646aa785211f3069ce01177da98e23b7890d859

คำสั่งเพิ่ม tag "v1.3.1" และ override tag "v1.3" เดิม

ลบ Tag (Delete a Tag)

ลบ tag ใช้ flag -d สมมติลบ tag "v1.3":

git tag -d v1.3
git tag

ผลลัพธ์:

v1.4
v1.2
v1.1

คำสั่งแรกลบ tag v1.3 คำสั่งที่สองดูรายการ tags ไม่เห็น v1.3 แล้ว เพราะลบไปแล้ว

สรุป

Tagging เป็นฟีเจอร์สำคัญของ Git สำหรับติดตาม version ต่างๆ ของ repository Tags ใส่ได้ทั้ง current commit และ commit เก่าใน repository

บทช่วยสอนนี้อธิบายพื้นฐาน tagging และคำสั่ง git tag พร้อมตัวอย่าง ตอนนี้คุณพร้อมใช้ git tag อย่างมืออาชีพแล้ว!