วิธีทำ "go get" บนแท็กเฉพาะของที่เก็บ github


89

ฉันกำลังพยายามรวบรวมฐานข้อมูล InfluxDB (เวอร์ชัน v0.8.8) โดยใช้ go get github.com/influxdb/influxdb

แต่สิ่งนี้ดึงสาขาหลักและฉันต้องการv0.8.8แท็ก

ฉันพยายามทำแล้ว go get github.com/influxdb/influxdb/releases/tag/v0.8.8แต่ล้มเหลวโดยบอกว่าไม่พบ

ฉันยังพยายามที่จะทำประจำgo getสาขาหลักแล้วด้วยตนเองการตรวจสอบจากแท็กที่ใช้gitในGOPATH/src/github...เพื่อที่จะตั้งรุ่น corret

ปัญหาในการใช้แนวทางสุดท้ายคือเมื่อฉันพยายามดึงการอ้างอิงโดยgo get -u -f ./...พยายามค้นหาในสาขาหลักและบางส่วนไม่มีอยู่ในสาขาหลัก ...

TL; DR : ดำเนินการgo getบนแท็ก github เฉพาะและดึงการอ้างอิงที่ถูกต้อง


ลองใช้ .. git tag -a v0.8.8 - "ความคิดเห็นของคุณ"
Ashok Londhe

2
@ AshokLond เขากำลังถามวิธีใช้แท็กgo getไม่ใช่วิธีสร้างแท็ก
wonderb0lt

@ wonderb0lt นี่คือคำสั่งเพื่อเพิ่มแท็ก
Ashok Londhe

ฉันคิดว่าฉันพยายามหาวิธีตรวจสอบแท็กที่เฉพาะเจาะจงเช่นกันและครั้งสุดท้ายฉันลองไม่ได้ ...
wonderb0lt

1
มีลักษณะที่นี้ ในตอนท้ายสไลด์เสนอทางเลือกในการจัดการการพึ่งพา
wonderb0lt

คำตอบ:


35

ไม่สามารถใช้go getเครื่องมือนี้ได้ แต่คุณต้องใช้เครื่องมือจัดการแพ็คเกจ go ของบุคคลที่สามหรือสร้างส้อมของคุณเองสำหรับแพ็คเกจที่คุณต้องการจัดการแบบละเอียดมากขึ้น

พูดคุยกับผู้ชายที่ทำงานที่ Google และเขารับทราบปัญหา / ข้อกำหนดนี้เขากล่าวว่าผู้ขายที่ทีมของเขาใช้นั้นมีขนาดใหญ่และพวกเขาอาจจะแก้ปัญหาด้วยเครื่องมือทางการในไม่ช้า

อ่านเพิ่มเติม:

การขายใน Go 1.6

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

เพิ่มเติมเกี่ยวกับวิธีการทำงานของผู้ขาย : การทำความเข้าใจและการใช้โฟลเดอร์ผู้ขาย

โมดูลใน Go 1.11

Go 1.11 ได้เปิดตัวคุณลักษณะทดลองที่เรียกว่าโมดูลเพื่อปรับปรุงการจัดการการพึ่งพาพวกเขาหวังว่าจะปล่อยให้มีความเสถียรใน Go 1.12: ข้อมูลเกี่ยวกับโมดูลใน Go 1.11


1
คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับส่วนของ Google ได้หรือไม่? มีการอภิปรายครั้งใหญ่เกี่ยวกับเรื่องนี้ในรายชื่อผู้รับจดหมายของชุมชน go มีแนวทางอื่นใดที่ยังไม่ได้กล่าวถึงที่นั่นหรือไม่?
Not_a_Golfer

1
@Not_a_Golfer เป็นผู้ชายที่ไม่ได้เป็นส่วนหนึ่งของทีม Go แต่พูดถึงว่าปัจจุบันพวกเขาใช้การให้บริการภายในและมันค่อนข้างใหญ่ ดังนั้นพวกเขาจึงสนใจที่จะแก้ปัญหาให้ดีขึ้นด้วยเครื่องมือทางการ คิดว่ามันเป็นคำสั่งที่ไม่เป็นทางการ แต่จะทำให้ชัดเจนมากขึ้น
Robin Andersson

2
AFAIK ข้อเสนอเดียวสำหรับรูปแบบไฟล์ผู้จำหน่าย / การอ้างอิงอย่างเป็นทางการ สิ่งนี้ยังคงยอดเยี่ยมในโครงการนั้นจะไม่เชื่อมโยงกับเครื่องมืออ้างอิงและสามารถทำงานร่วมกับโซลูชันใดก็ได้ที่พวกเขาต้องการ (เช่นฉันชอบการล็อกการแก้ไขในขณะที่คนอื่นชอบการขาย)
JimB

โมดูลไม่เกี่ยวข้องกับการพึ่งพาคอมไพเลอร์โค้ดซึ่งบังคับให้เราใช้ go get protoc-gen-go ที่อื่นด้วยเวอร์ชันแก้ไข ทำให้เราต้องติดตามเวอร์ชันเดียวกันในสถานที่ 2 แห่ง (เนื่องจากไลบรารีอยู่คู่กับเครื่องกำเนิดไฟฟ้าอย่างแน่นหนา)
Martin Kosicky

24

go mod มีวางจำหน่ายแล้ว

สำหรับผู้ที่ต้องการสร้างไบนารีของแท็กเฉพาะนี่คือวิธีของฉัน:

mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/nsq@v1.1.0
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

คำอธิบาย:

  • รหัสข้างต้นดึง v1.1.0 NSQ nsqdและสร้าง
  • go mod init .สร้างgo.modไฟล์ในไดเร็กทอรีปัจจุบันซึ่งเปิดใช้งานgo getกับการแก้ไข / แท็ก (ดูลิงค์นี้ )
  • -d หมายถึง "ดาวน์โหลดเท่านั้น" หากคุณต้องการติดตั้งโดยตรงให้ละเว้นแฟล็กนี้และคำสั่ง build ด้านล่างบรรทัดนี้
  • -v หมายถึง "เป็น verbose"
  • โค้ดด้านบนใช้สำหรับ Windows หากคุณใช้ Linux ให้แทนที่bin/nsqd.exeด้วยbin/nsqd.

%GOPATH%\pkg\modดาวน์โหลดโมดูลถูกเก็บไว้ใน หากคุณไม่ต้องการสร้างมลพิษให้กับGOPATHไดเรกทอรีของคุณให้สร้างใหม่และตั้งค่าเป็นไดเรกทอรีGOPATHนั้น


4
ในขั้นตอนที่ 1.13 go mod initจำเป็นต้องมีรหัสโมดูลเช่นgo mod init local/build
archie

11

ฉันประสบความสำเร็จกับสิ่งนี้:

  • เรียกใช้คำสั่ง get โดยไม่มีแท็ก - ควรโคลนสาขาหลัก
  • ย้ายไปที่ไดเร็กทอรีโคลนและชำระเงินแท็กหรือสาขาที่คุณต้องการ
  • เรียกใช้คำสั่ง go get อีกครั้งควรประมวลผลคำสั่งในสาขาที่เช็คเอาต์

4
ในการรันครั้งแรกคุณสามารถใช้go get -d <git-url>เพียงดาวน์โหลดแพ็คเกจและข้ามการติดตั้ง
webwurst

นี่คือสิ่งที่ควรใช้เมื่อคุณต้องการแท็กเฉพาะ gopkg.in นั้นเข้มงวดเกินไป
Hrishikesh Kumar

4

คำถามนี้เกิดขึ้นก่อน Go Modules แต่สำหรับการอ้างอิงในอนาคตขั้นตอนที่ถูกต้องใน Go 1.11 สำหรับการดึงข้อมูลเวอร์ชันเฉพาะคือ:

go get github.com/influxdb@[version]

หรือเพื่อรับแท็ก git เฉพาะ:

go get github.com/influxdb@[gitref]


1

ฉันมีวิธีการ (ค่อนข้างแฮ็ก แต่ใช้งานได้) ในการแก้ไขปัญหานี้อย่างน้อยสำหรับที่เก็บ git: เนื่องจากแพ็คเกจ go get'ed เป็นที่เก็บการควบคุมแหล่งที่มาปกติเราสามารถตรวจสอบแท็กโดยใช้เครื่องมือคอมไพล์ปกติ (สามารถใช้คอมไพล์จากบรรทัดคำสั่ง , ฉันใช้ Atlassian SourceTree)

ที่จะแบ่งปันการกำหนดค่าแพคเกจของฉันกับเพื่อนร่วมทีมของฉันฉันได้ทำเก็บคอมไพล์ออก ouf GOPATH จากนั้นฉันก็เพิ่มแพ็คเกจทั้งหมด (อย่างน้อยที่สุดที่ฉันต้องการจัดการด้วยวิธีนี้) ไปยัง repo นี้เป็นโมดูลย่อย git สิ่งนี้ต้องการให้คุณย้ายโฟลเดอร์ repo ที่มีอยู่ออกไปให้พ้นทางและเพิ่มใหม่เป็นโมดูลย่อย git เพื่อไม่ให้สับสนกับคอมไพล์ กระบวนการนี้ค่อนข้างน่าเบื่อ แต่พิสูจน์แล้วว่าคุ้มค่ากับปัญหา:

ตอนนี้ฉันสามารถยอมรับและผลักดันไปที่ GOPATH-repo ทุกครั้งที่ฉันใช้แพ็คเกจ go ใหม่ เมื่อเพื่อนร่วมทีมของฉันดึงจาก repo นี้และออกการอัปเดตโมดูลย่อย git (หรือเพียงแค่อัปเดตผ่าน SoureTree ซึ่งจะดำเนินการโดยอัตโนมัติ) เวอร์ชันของแพ็คเกจจะถูกตรวจสอบในแท็กเดียวกับที่ฉันเป็น

แน่นอนว่าสิ่งนี้ใช้ได้กับแพ็คเกจภายใต้การควบคุมแหล่ง git เท่านั้น ...


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