ดาวน์โหลดแท็กเฉพาะด้วย Git


1941

ฉันกำลังพยายามหาวิธีที่ฉันสามารถดาวน์โหลดแท็กเฉพาะของที่เก็บ Git - เป็นรุ่นหนึ่งที่อยู่ด้านหลังรุ่นปัจจุบัน

ฉันเห็นว่ามีแท็กสำหรับรุ่นก่อนหน้าในหน้าเว็บคอมไพล์ด้วยชื่อวัตถุของบางสิ่งบางอย่างเลขฐานสิบหกยาว

แต่ชื่อรุ่นคือ " Tagged release 1.1.5" ตามไซต์

ฉันลองคำสั่งเช่นนี้ (เปลี่ยนชื่อ):

git clone http://git.abc.net/git/abc.git my_abc

และฉันได้รับบางสิ่งบางอย่าง - ไดเรกทอรีไดเรกทอรีย่อย ฯลฯ

ถ้าเป็นพื้นที่เก็บข้อมูลทั้งหมดฉันจะหาเวอร์ชั่นที่ฉันค้นหาได้อย่างไร ถ้าไม่ฉันจะดาวน์โหลดเวอร์ชั่นนั้นได้อย่างไร


11
ฉันพัฒนาบน repo ที่แตกต่างไปจากเดิมอย่างสิ้นเชิงดังนั้นการผลิตดังนั้นการผลิตของฉันจึงไม่รู้จักแท็กใด ๆ เมื่อฉันพยายามใช้เช็คเอาต์ วิธีแก้คือใช้ "git pull --tags" จากนั้นใช้ git checkout
สถาปนิกองค์กร

11
"git fetch --tags" ก็ทำงานได้เช่นกัน
John Erck

16
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abcเพื่อหลีกเลี่ยงการโคลนที่เก็บทั้งหมดแล้วเปลี่ยนไปใช้แท็กคุณโดยตรงสามารถทำได้ สิ่งนี้จะได้ผลถ้าคุณไม่มีสาขาที่มีชื่อเหมือนกันแน่นอน (ขึ้นอยู่กับวิธีการของคุณสิ่งนี้อาจไม่เกิดขึ้น)
RedGlyph

3
@ RedGlyph ขอบคุณฉันจะลอง อย่างอื่นที่เราสามารถทำเช่นนี้ git checkout -b new-branch tag-name. ตอนนี้โคลนสาขาใหม่ของคุณ เมื่อใดก็ตามที่เราต้องการเราสามารถลบสาขาใหม่
kalidasan

คำตอบ:


2871
$ git clone

จะให้พื้นที่เก็บข้อมูลทั้งหมดแก่คุณ

หลังจากโคลนคุณสามารถแสดงรายการแท็กด้วย$ git tag -lแล้วเช็คเอาต์แท็กเฉพาะ:

$ git checkout tags/<tag_name>

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

$ git checkout tags/<tag_name> -b <branch_name>

15
อ๋อ คอมไพล์แตกต่างจากการโค่นล้มในส่วนนี้ แท็ก svn นั้นจะทำการคัดลอกไฟล์ไปยังโฟลเดอร์ใหม่ดังนั้นคุณจึงสามารถเช็คเอาท์ไฟล์ที่ต้องการได้ในขณะที่แท็ก git เป็นตัวชี้ไปยังการแก้ไขที่เฉพาะเจาะจง
dbr

5
ถ้าคุณมีสาขาและแท็กที่มีชื่อเหมือนกันล่ะ หากคุณเพียงแค่พูดว่า "เช็คเอาต์ git <name>" แจ้งว่า "คำเตือน: refname '<name>' ไม่ชัดเจนเปลี่ยนเป็นสาขา '<name>'" - คุณจะบอกให้เปลี่ยนไปใช้แท็กแทนได้อย่างไร
MatrixFrog

54
เมื่อทำการเช็คเอาต์และตามที่ดีเร็กพูดถึงแล้ว repo จะเข้าสู่สถานะ "ถอดหัว" ให้เพิ่มการ-bตั้งค่าสถานะบอก git เพื่อสร้างสาขาใหม่และระบุชื่อสาขา:git checkout <tag_name> -b <branch_name>
hellatan

22
@hellatan คุณควรทำเช่นนั้นเมื่อคุณต้องการสร้างสาขา แต่ส่วนใหญ่คุณอาจไม่ทำ การใช้งานในสถานะ "ถอดหัว" จะไม่ทำร้ายคุณและมีแนวโน้มว่าสิ่งที่คุณต้องการหากคุณต้องการตรวจสอบประวัติคอมไพล์
machineghost

4
ในเวอร์ชัน git 1.8.3.5และที่ใหม่กว่า--branch <tag ref>ควรอนุญาตให้คุณดาวน์โหลดที่เก็บเริ่มต้นที่<tag ref>repo HEAD ของคุณ รวมกับ--depth 1จะทำแท็กชำระเงินตื้น ดูstackoverflow.com/a/21699307/1695680
ThorSummoner

409
git clone --branch my_abc http://git.abc.net/git/abc.git

จะโคลน repo และปล่อยให้คุณในแท็กที่คุณสนใจ

เอกสารประกอบสำหรับ 1.8.0 ของสถานะgit clone

- สาขาสามารถใช้แท็กและแยกส่วน HEAD ที่กระทำในที่เก็บผลลัพธ์


7
สิ่งนี้ทำงานได้ (อย่างน้อยตอนนี้) สำหรับแท็กแม้ว่าคุณจะอยู่ในสถานะ HEAD ที่แยกออกมา
mxcl

72
FYI: ระบุด้วย--depth 1เพื่อหลีกเลี่ยงการดาวน์โหลดข้อผูกพันที่ไม่เป็นปัจจุบัน
คิวเมนตัส

4
สิ่งนี้ไม่สามารถใช้กับแท็กได้ เฉพาะสาขา แก้ไข: ดูเหมือนว่า git รุ่นใหม่จะรองรับเท่านั้น
lzap

นอกจากนี้เรายังสามารถแก้ไข. git / config (หรือกำหนดค่าอย่างใดอย่างหนึ่ง) เพื่อทำโคลนนิ่งตื้น ๆ ของแท็กสองแท็กขึ้นไปหากจำเป็นต้องใช้ให้อัพเกรดโคลนนิ่งตื้นเป็นโคลนนิ่งแบบเต็มเป็นต้น
Sam Watkins

คุณสามารถระบุสาขาที่คุณต้องการพร้อมกับแท็ก เช่นเดียวกับgit clone --branch my_abc http://git.abc.net/git/abc.git -b qualityคุณภาพคือชื่อของสาขาที่เราต้องการ btw
hazimdikenli

180

สำหรับการตรวจสอบเพียงแท็กที่กำหนดสำหรับการปรับใช้ฉันใช้เช่น:

git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

นี่น่าจะเป็นวิธีที่เร็วที่สุดในการตรวจสอบรหัสจากที่เก็บระยะไกลหากมีความสนใจเฉพาะรหัสล่าสุดแทนที่จะเป็นที่เก็บข้อมูลที่สมบูรณ์ ด้วยวิธีนี้มันคล้ายกับคำสั่ง 'svn co'

หมายเหตุ: ตามคู่มือ Git การส่ง--depthค่าสถานะจะบอกเป็น--single-branchค่าเริ่มต้น

--ความลึก

สร้างโคลนตื้น ๆ ที่มีประวัติถูกตัดให้เหลือจำนวนที่ระบุ หมายถึง - สาขาเดียวยกเว้น - ไม่มีสาขาเดียวที่จะได้รับประวัติใกล้เคล็ดลับของสาขาทั้งหมด หากคุณต้องการโคลน submodules อย่างตื้น ๆ ให้ส่ง --shallow-submodules


10
ไม่สามารถเชื่อได้ว่ามันซับซ้อน เดาว่าไม่มีใครคาดหวังว่าคนอื่นจะใช้รหัสของพวกเขา
Ben

9
@Ben จริง ๆ แล้วนี่เป็นทางออกที่ง่ายที่สุด (จำเป็นต้องใช้คำสั่งเดียว)
Eliran Malka

3
@ ทำไมถึงมีความซับซ้อน? เป็น usecase พิเศษที่มีคุณสมบัติบางอย่างที่คุณต้องการทำแตกต่างจากค่าเริ่มต้น แน่นอนคุณต้องระบุ ทางออกปกติคือเช็คเอาต์ repo ทั้งหมดในvcs แบบกระจาย
erikbwork

9
@Ben ถูกต้อง git นั้นซับซ้อนและถูกเขียนขึ้นเมื่อหลายปีก่อนโดยไลนัสและเขาเป็นคนเดียวที่เข้าใจได้ว่ามันทำงานอย่างไร xkcd.com/1597
RyanNerd

11
--depth n--single-branchหมายถึง คุณไม่ต้องการทั้งคู่
Niyaz

98

ฉันไม่ใช่ผู้เชี่ยวชาญคอมไพล์ แต่ฉันคิดว่านี่น่าจะใช้ได้:

git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc 

หรือ

git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc

รูปแบบที่สองสร้างสาขาใหม่โดยยึดตามแท็กซึ่งช่วยให้คุณหลีกเลี่ยง 'HEAD ที่ถอดออกได้' (คู่มือ git-checkout)

repo git ทุกคนมีประวัติการแก้ไขทั้งหมดดังนั้นการโคลน repo จะช่วยให้คุณสามารถเข้าถึงการกระทำล่าสุดรวมถึงทุกอย่างที่มาก่อนรวมถึงแท็กที่คุณต้องการ


4
ขอบคุณ. ฉันจำเป็นต้องใช้git checkout -b b1.5.0 v1.5.0เมื่อตรวจสอบรุ่นภายในสาขา 'หน้า gh' เพื่อส่งไปที่หน้า Github ได้สำเร็จ สรุปสาระสำคัญนี้ฉันเขียนขึ้นอาจช่วยให้คนอื่น ๆ อีก: branch / tag / submodules ... gist.github.com/1064750
Chris Jacob

4
ฉันไม่คิดว่านี่เป็นสิ่งที่ถูกต้องสมบูรณ์ (เช่นการวางเทอร์มินัล) เนื่องจากคุณต้องcdเข้ามาabc/ก่อนที่คุณจะสามารถชำระเงินสาขาได้
Steven Lu

@StevenLu คุณถูกต้องแน่นอน ฉันกำลังมองหาแนวคิดมากกว่าที่จะถูกตัดและวาง แต่ก็อาจจะแม่นยำที่สุดเท่าที่จะทำได้ cdฉันได้เพิ่ม
grossvogel

81

คุณสามารถใช้การเก็บถาวร git เพื่อดาวน์โหลด tar ball สำหรับแท็กที่กำหนดหรือส่งรหัส:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

คุณสามารถส่งออกไฟล์ zip ของแท็กได้

  1. รายการแท็ก:

    git tag
    
    0.0.1
    0.1.0
    
  2. ส่งออกแท็ก:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
    
  3. หมายเหตุ:

    • คุณไม่จำเป็นต้องระบุรูปแบบ มันจะถูกเลือกโดยชื่อไฟล์ที่ส่งออก
    • การระบุคำนำหน้าจะทำให้รหัสของคุณส่งออกไปยังไดเรกทอรี (ถ้าคุณใส่เครื่องหมายทับ)

3
คำสั่งนี้ใช้ไม่ได้กับ submodules ดูstackoverflow.com/questions/1591387/ …
Zitrax

3
แต่เก็บถาวร git ยังลบการควบคุมเวอร์ชันดังนั้นคุณไม่สามารถทำการเช็คเอาต์ git อื่นเพื่ออัปเกรดเป็นแท็กถัดไปได้
idbrii

9
ใช่คุณสูญเสียการควบคุมเวอร์ชัน แต่การเก็บถาวรเวลา git บันทึกเมื่อเปรียบเทียบกับ git clone นั้นไม่น่าเชื่อเลย! +1
MarcH

นี่คือสิ่งที่ฉันต้องการมากยกเว้นว่าgit archiveจะขอรหัสผ่านเมื่อทุกสิ่งที่ฉันต้องการคือการดาวน์โหลดจาก repo สาธารณะ ฉันจะทำให้มันใช้ http แทน ssh ได้อย่างไร
robru

1
สิ่งนี้ล้มเหลวด้วยfatal: Operation not supported by protocol.และUnexpected end of command streamข้อผิดพลาด อีกวิธีหนึ่งก็สามารถกลับfatal: The remote end hung up unexpectedlyข้อผิดพลาด
คิวเมนตัส

52

ใช้--single-branchสวิทช์ (เป็นของ Git 1.7.10) ไวยากรณ์คือ:

git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>] 

ตัวอย่างเช่น:

git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5

ประโยชน์: Git จะได้รับวัตถุและ (ต้อง) แก้ไข deltas สำหรับสาขา / แท็กที่ระบุเท่านั้น - ในขณะที่ตรวจสอบจำนวนไฟล์ที่แน่นอน! ขึ้นอยู่กับที่เก็บซอร์สซึ่งจะช่วยให้คุณประหยัดพื้นที่ดิสก์ได้มาก (ยิ่งกว่านั้นเร็วกว่ามาก)


3
ผู้ใด downvoted / downvotes คำตอบนี้: โปรดแสดงความคิดเห็นพร้อมคำอธิบายสั้น ๆ สำหรับ downvote (แค่ถามเพราะฉันสับสนเล็กน้อยเพราะ afaik นี่เป็นทางออกที่ดีที่สุดสำหรับปัญหาที่กำหนดและถ้าคุณไม่คิดอย่างนั้นฉันอยากจะรู้ว่าทำไม)ขอบคุณมาก
eyecatchUp

5
อย่าพยายามทำความเข้าใจกับ downvote มากเกินไป .. คำตอบของคุณดีมาก downvotes ของพวกเขาดูเหมือนไม่พร้อมเพรียง .. นั่นคือชีวิตใน SOF ..
javadba

ใช้งานไม่ได้กับ git เวอร์ชั่น 2.22.0.windows.1
Mahesh

29

เรียกแท็กทั้งหมดในรีโมตเฉพาะนั้นก่อน

git fetch <remote> 'refs/tags/*:refs/tags/*'

หรือเพียงแค่พิมพ์

git fetch <remote>

จากนั้นตรวจสอบแท็กที่มีอยู่

git tag -l

จากนั้นเปลี่ยนเป็นแท็กเฉพาะนั้นโดยใช้คำสั่งด้านล่าง

git checkout tags/<tag_name>

หวังว่านี่จะช่วยคุณได้!


เหตุใดจึงใช้´git tag -l´ ควรเป็นเช่นเดียวกับ´git tag´
serup

1
@serup; git tagจะเพิ่มแท็กขณะที่git tag -lแสดงรายการแท็กที่มีอยู่
Joost Döbken

18

หากแท็กของคุณสามารถจัดเรียงได้โดยใช้sortคำสั่งlinux ให้ใช้สิ่งนี้:

git tag | sort -n | tail -1

เช่น. ถ้าgit tagผลตอบแทน:

v1.0.1
v1.0.2
v1.0.5
v1.0.4

git tag | sort -n | tail -1 จะส่งออก:

v1.0.5

git tag | sort -n | tail -2 | head -1 จะส่งออก:

v1.0.4

(เพราะคุณขอแท็กล่าสุดที่สอง)

หากต้องการชำระเงินแท็กอันดับแรกคัดลอก repo จากนั้นพิมพ์:

git checkout v1.0.4

.. หรือแท็กอะไรก็ได้ที่คุณต้องการ


25
จนกว่าจะถึง v1.0.10 และแล้วสิ่งที่ไม่ดีเกิดขึ้น :)
Laurent Grégoire

10
หากต้องการให้แท็กของคุณเรียงลำดับตามลำดับเวลา:git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
Bob G

สายการบินเดียวที่จะเช็คเอาต์เวอร์ชั่นล่าสุดโดยอัตโนมัติgit checkout `git tag | sort -n | tail -1`
weiji14

คุณอาจต้องการที่จะใช้แทนsort -V sort -nก่อนหน้านี้จัดการรุ่นที่ถูกต้องซึ่งไม่จำเป็นต้องเป็นตัวเลขเช่น "1.2.3" นอกจากนี้ยังเข้าใจว่า "0.4.10" เป็นไปตาม "0.4.1" และไม่ใช่หลังจาก "0.4.2" ซึ่ง-nจะให้คุณ
Mateusz Misiorny

16

ฉันตรวจสอบเอกสารการชำระเงิน gitแล้วมันเผยให้เห็นสิ่งที่น่าสนใจอย่างหนึ่ง:

git checkout -b <new_branch_name> <start_point> โดยที่ <start_point> เป็นชื่อของคอมมิทที่จะเริ่มสาขาใหม่ ค่าเริ่มต้นไปที่ HEAD

ดังนั้นเราสามารถพูดถึงชื่อแท็ก (ในขณะที่แท็กไม่มีอะไร แต่ชื่อของการกระทำ) เป็นพูด:

>> git checkout -b 1.0.2_branch 1.0.2 ใน
ภายหลังแก้ไขไฟล์บางไฟล์
>> git push --tags

PS: ใน Git คุณไม่สามารถอัปเดตแท็กได้โดยตรง (เนื่องจากแท็กเป็นเพียงป้ายกำกับสำหรับการส่ง) คุณต้องเช็คเอาต์แท็กเดียวกันกับสาขาจากนั้นส่งแท็กแล้วสร้างแท็กแยกต่างหาก


1
หรือถ้าคุณไม่คาดหวังว่าจะทำการเปลี่ยนแปลงใด ๆ และคุณเพียงต้องการดูว่าโค้ดดูเหมือนแท็กนั้นคุณสามารถเช็คเอาต์แท็กโดยไม่ต้องสร้างสาขา คุณจะได้รับข้อความอธิบายว่าคุณอยู่ในสถานะ "ถอดหัว" และคุณสามารถสร้างสาขาได้ในภายหลังหากคุณต้องการ
MatrixFrog

16
git fetch <gitserver> <remotetag>:<localtag>

===================================

ฉันเพิ่งทำสิ่งนี้ ครั้งแรกฉันทำให้แน่ใจว่าฉันรู้การสะกดชื่อแท็ก

git ls-remote --tags gitserver; : or origin, whatever your remote is called

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

8acb6864d10caa9baf25cc1e4857371efb01f7cd    refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2    refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518    refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3    refs/tags/Fix_110

ฉันเลือกแท็กที่ฉันต้องการและดึงข้อมูลนั้นและไม่มีอะไรเพิ่มเติมดังต่อไปนี้

git fetch gitserver Fix_110

จากนั้นฉันติดแท็กสิ่งนี้ในเครื่องท้องถิ่นของฉันตั้งชื่อเดียวกันกับแท็ก

git tag Fix_110 FETCH_HEAD

ฉันไม่ต้องการโคลนพื้นที่เก็บข้อมูลระยะไกลเป็นคนอื่นได้แนะนำให้ทำเพราะโครงการที่ฉันทำงานมีขนาดใหญ่และฉันต้องการที่จะพัฒนาในสภาพแวดล้อมที่สะอาดดี ฉันรู้สึกว่ามันใกล้เคียงกับคำถามดั้งเดิม "ฉันพยายามหาวิธีดาวน์โหลดแท็กแบบเฉพาะ" กว่าโซลูชันที่แนะนำการโคลนพื้นที่เก็บข้อมูลทั้งหมด ฉันไม่เห็นสาเหตุที่ทุกคนควรมีสำเนาซอร์สของ Windows NT และ Windows 8.1 หากพวกเขาต้องการดูซอร์สโค้ด DOS 0.1 (ตัวอย่าง)

ฉันไม่ต้องการใช้ CHECKOUT ตามที่คนอื่นแนะนำ ฉันตรวจสอบสาขาแล้วและไม่ต้องการส่งผลกระทบต่อสิ่งนั้น ความตั้งใจของฉันคือการดึงซอฟต์แวร์ที่ฉันต้องการเพื่อให้ฉันสามารถหยิบบางสิ่งบางอย่างเชอร์รี่และเพิ่มเข้าไปในการพัฒนาของฉัน

อาจมีวิธีดึงแท็กเองแทนที่จะเป็นเพียงสำเนาของการส่งมอบที่ติดแท็ก ฉันต้องติดแท็กให้กับตัวเอง แก้ไข: ใช่แล้วฉันได้พบแล้ว

git fetch gitserver Fix_110:Fix_110

ที่ซึ่งคุณเห็นเครื่องหมายจุดคู่นั่นคือ remote-name: local-name และนี่คือชื่อแท็ก สิ่งนี้จะทำงานโดยไม่ทำให้ต้นไม้ทำงาน ฯลฯ ดูเหมือนว่าจะคัดลอกข้อมูลจากรีโมตไปยังเครื่องท้องถิ่นเพื่อให้คุณมีสำเนาของคุณเอง

git fetch gitserver --dry-run Fix_110:Fix_110

ด้วยตัวเลือก --dry-run ที่เพิ่มเข้ามาจะช่วยให้คุณได้เห็นสิ่งที่คำสั่งจะทำถ้าคุณต้องการตรวจสอบสิ่งที่คุณต้องการ ดังนั้นฉันเดาง่าย ๆ

git fetch gitserver remotetag:localtag

คือคำตอบที่แท้จริง

=

บันทึกย่อแยกต่างหากเกี่ยวกับแท็ก ... เมื่อฉันเริ่มต้นสิ่งใหม่ฉันมักจะติดแท็กพื้นที่เก็บข้อมูลว่างเปล่าหลังจาก git init ตั้งแต่

git rebase -i XXXXX 

ต้องมีการกระทำและคำถามเกิดขึ้น "คุณจะรีบูตการเปลี่ยนแปลงที่มีการเปลี่ยนแปลงซอฟต์แวร์ครั้งแรกของคุณได้อย่างไร" ดังนั้นเมื่อฉันเริ่มทำงานฉันจะทำ

git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY

คือสร้างคอมมิชชันก่อนการเปลี่ยนแปลงจริงของฉันครั้งแรกจากนั้นใช้ในภายหลัง

git rebase -i EMPTY 

ถ้าผมต้องการที่จะ rebase การทำงานทั้งหมดของฉันรวมทั้งการเปลี่ยนแปลงครั้งแรก


8

จากคำตอบของปีเตอร์จอห์นสันฉันได้สร้างนามแฝงเล็ก ๆ ที่น่ารักให้กับตัวเอง:

alias gcolt="git checkout $(git tag | sort -V | tail -1)"

aka 'git checkout แท็กล่าสุด'

สิ่งนี้ขึ้นอยู่กับการจัดเรียงของ GNU ซึ่งจัดการสถานการณ์อย่างเหมาะสมเช่นเดียวกับที่ lOranger ชี้ให้เห็น:

v1.0.1
...
v1.0.9
v1.0.10

หากคุณใช้ Mac brew install coreutilsแล้วโทร gsort แทน



5

ตรวจสอบแท็ก

หากคุณต้องการดูเวอร์ชันของไฟล์ที่แท็กชี้ไปคุณสามารถทำการเช็คเอาต์คอมไพล์ได้ซึ่งจะทำให้พื้นที่เก็บข้อมูลของคุณอยู่ในสถานะ“ ถอดหัว” ซึ่งมีผลข้างเคียงที่ไม่ดี:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

ในสถานะ“ ถอดหัว” หากคุณทำการเปลี่ยนแปลงแล้วสร้างการกระทำแท็กจะยังคงเหมือนเดิม แต่การกระทำใหม่ของคุณจะไม่อยู่ในสาขาใด ๆ และจะไม่สามารถเข้าถึงได้ยกเว้นการแฮชการกระทำที่แน่นอน ดังนั้นหากคุณต้องการทำการเปลี่ยนแปลง - เช่นคุณกำลังแก้ไขข้อบกพร่องในเวอร์ชั่นที่เก่ากว่า - โดยทั่วไปคุณจะต้องการสร้างสาขา:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

หากคุณทำเช่นนี้และทำการคอมมิชชัน version2 branch ของคุณจะแตกต่างจากแท็ก v2.0.0 เล็กน้อยเนื่องจากจะดำเนินต่อไปพร้อมกับการเปลี่ยนแปลงใหม่ดังนั้นจึงควรระมัดระวัง


4

ฉันทำสิ่งนี้ผ่านทาง github API:

curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\
tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \

1
สิ่งนี้ใช้ได้กับกิ่งและแท็ก แต่ไม่ใช่หัวหน้าของต้นแบบที่ต้องการแท็กที่สร้างขึ้น Imho ค่อนข้างหรูหราในการรับรุ่นที่มีขนาดเล็กที่สุด
J0hnG4lt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.