หากฉันต้องการติดแท็กการกระทำปัจจุบัน ฉันรู้ว่าทั้งสองบรรทัดคำสั่งต่อไปนี้ทำงาน:
git tag <tagname>
และ
git tag -a <tagname> -m '<message>'
ความแตกต่างระหว่างคำสั่งเหล่านี้คืออะไร?
หากฉันต้องการติดแท็กการกระทำปัจจุบัน ฉันรู้ว่าทั้งสองบรรทัดคำสั่งต่อไปนี้ทำงาน:
git tag <tagname>
และ
git tag -a <tagname> -m '<message>'
ความแตกต่างระหว่างคำสั่งเหล่านี้คืออะไร?
คำตอบ:
ความแตกต่างระหว่างคำสั่งคือคำสั่งหนึ่งมอบข้อความแท็กให้คุณ แท็กที่มีหมายเหตุประกอบมีข้อความที่สามารถแสดงด้วย git-show (1) ในขณะที่แท็กที่ไม่มีคำอธิบายประกอบนั้นเป็นเพียงตัวชี้ที่ตั้งชื่อไว้เพื่อคอมมิชชัน
ตามเอกสารประกอบ : "ในการสร้างแท็กที่มีน้ำหนักเบาอย่าระบุตัวเลือก -a, -s หรือ -m เพียงระบุชื่อแท็ก" นอกจากนี้ยังมีตัวเลือกต่าง ๆ ในการเขียนข้อความบนแท็กที่มีคำอธิบายประกอบ:
git tag <tagname>
Git จะสร้างแท็กที่การแก้ไขปัจจุบัน แต่จะไม่พร้อมท์ให้คุณใส่คำอธิบายประกอบ มันจะถูกแท็กโดยไม่มีข้อความ (นี่คือแท็กที่มีน้ำหนักเบา)git tag -a <tagname>
Git จะขอให้คุณใส่คำอธิบายประกอบเว้นแต่ว่าคุณจะใช้แฟล็ก -m เพื่อให้ข้อความgit tag -a -m <msg> <tagname>
Git จะแท็กการคอมมิทและใส่คำอธิบายประกอบลงในข้อความที่ให้ไว้git tag -m <msg> <tagname>
Git จะทำตัวราวกับว่าคุณผ่านแฟล็ก -a เพื่อใส่คำอธิบายประกอบและใช้ข้อความที่ให้ไว้โดยทั่วไปจะเป็นเพียงแค่จำนวนเงินที่คุณต้องการให้แท็กมีคำอธิบายประกอบและข้อมูลอื่น ๆ ที่เกี่ยวข้องหรือไม่
git tag -a <tag> -m ''
) แต่แท็กที่มีคำอธิบายประกอบจะมีตัวแท็ก (ผู้เขียน) และวันที่เสมอ
git push --follow-tags
แท็กที่มีคำอธิบายประกอบเท่านั้นที่จะถูกผลัก
ผลักดันแท็กที่ใส่หมายเหตุประกอบไว้
man git-tag
พูดว่า:
แท็กที่ทำหมายเหตุประกอบไว้สำหรับปล่อยในขณะที่แท็กที่มีน้ำหนักเบานั้นมีไว้สำหรับป้ายส่วนตัวหรือป้ายชั่วคราว
และพฤติกรรมบางอย่างแตกต่างระหว่างพวกเขาในรูปแบบที่คำแนะนำนี้มีประโยชน์เช่น:
แท็กที่ใส่หมายเหตุประกอบไว้สามารถมีข้อความผู้สร้างและวันที่ที่แตกต่างจากการคอมมิตที่ชี้ไป ดังนั้นคุณสามารถใช้มันเพื่ออธิบายการเปิดตัวได้โดยไม่ต้องทำการคอมมิท
แท็กน้ำหนักเบาไม่มีข้อมูลเพิ่มเติมและไม่ต้องการเนื่องจากคุณจะใช้มันเพื่อพัฒนาตัวเองเท่านั้น
git describe
หากไม่มีตัวเลือกบรรทัดคำสั่งจะเห็นแท็กที่มีคำอธิบายประกอบเท่านั้นความแตกต่างภายใน
ทั้งแท็กที่มีน้ำหนักเบาและมีคำอธิบายประกอบเป็นไฟล์ภายใต้.git/refs/tags
ที่ประกอบด้วย SHA-1
สำหรับแท็กที่มีน้ำหนักเบา SHA-1 จะชี้ไปที่การกระทำโดยตรง:
git tag light
cat .git/refs/tags/light
พิมพ์เช่นเดียวกับ SHA-1 ของ HEAD
จึงไม่น่าแปลกใจที่พวกเขาไม่สามารถมีข้อมูลเมตาอื่น ๆ
แท็กหมายเหตุประกอบชี้ไปที่วัตถุแท็กในฐานข้อมูลวัตถุ
git tag -as -m msg annot
cat .git/refs/tags/annot
มี SHA ของวัตถุแท็กหมายเหตุประกอบ:
c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
จากนั้นเราสามารถรับเนื้อหาด้วย:
git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
ตัวอย่างผลลัพธ์:
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
และนี่คือวิธีที่มีข้อมูลเมตาเพิ่มเติม ดังที่เราเห็นได้จากผลลัพธ์เขตข้อมูลเมตาคือ:
การวิเคราะห์รายละเอียดเพิ่มเติมของรูปแบบมีอยู่ที่: รูปแบบของวัตถุแท็ก git คืออะไรและจะคำนวณ SHA ได้อย่างไร
โบนัส
กำหนดว่าแท็กจะมีคำอธิบายประกอบหรือไม่:
git cat-file -t tag
เอาท์พุท
commit
สำหรับน้ำหนักเบาเนื่องจากไม่มีแท็กวัตถุจึงชี้ไปที่การส่งโดยตรงtag
สำหรับคำอธิบายประกอบเนื่องจากมีวัตถุแท็กในกรณีนั้นรายการแท็กน้ำหนักเบาเท่านั้น: ฉันจะแสดงรายการแท็กน้ำหนักเบาทั้งหมดได้อย่างไร
ใหญ่แตกต่างกันจะมีการอธิบายที่ดีที่สุดที่นี่
โดยทั่วไปแท็กที่มีน้ำหนักเบาเป็นเพียงตัวชี้ไปยังการกระทำที่เฉพาะเจาะจง ไม่มีข้อมูลเพิ่มเติมจะถูกบันทึกไว้ ; ในทางกลับกันแท็กที่ใส่คำอธิบายประกอบเป็นวัตถุปกติซึ่งมีผู้เขียนและวันที่และสามารถอ้างถึงได้เนื่องจากพวกเขามีคีย์ SHA ของตัวเอง
หากรู้ว่าใครแท็กอะไรและเมื่อใดมีความเกี่ยวข้องกับคุณให้ใช้แท็กที่มีคำอธิบายประกอบ หากคุณต้องการติดแท็กจุดเฉพาะในการพัฒนาของคุณไม่ว่าใครและเมื่อใดที่ทำเช่นนั้นแท็กที่มีน้ำหนักเบาก็ดีพอ
โดยปกติแล้วคุณจะไปที่แท็กหมายเหตุประกอบ แต่มันขึ้นอยู่กับต้นแบบ Git ของโครงการ