जीथब रिपॉजिटरी के विशिष्ट टैग पर "गो गेट गेट" कैसे करें


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एक विशिष्ट गिथब टैग पर प्रदर्शन करते हैं , और सही निर्भरता को खींचते हैं।


यह कोशिश करो .. git टैग -a v0.8.8 - "आपकी टिप्पणी"
अशोक लोंढे

2
@AshokLondhe वह पूछ रहा है कि कैसे एक टैग का उपयोग करें go get, न कि कैसे एक बनाने के लिए।
Wonderb0lt

@ wonderb0lt यह टैग जोड़ने के लिए कमांड है।
अशोक लोंढे

मुझे लगता है कि मैंने यह पता लगाने की कोशिश की कि कैसे एक विशिष्ट टैग की जांच की जाए, और पिछली बार मैंने कोशिश की थी कि यह संभव नहीं है ...
आश्चर्य है कि

1
इस पर एक नजर । अंत के पास स्लाइड कुछ निर्भरता प्रबंधन विकल्प प्रदान करते हैं।
Wonderb0lt

जवाबों:


35

go getउपकरण का उपयोग करना संभव नहीं है । इसके बजाय आपको थर्ड पार्टी गो पैकेज मैनेजमेंट टूल का उपयोग करने की आवश्यकता है या उन पैकेजों के लिए अपने स्वयं के कांटे बनाने की आवश्यकता है जिन्हें आप अधिक महीन दाने का प्रबंधन करना चाहते हैं।

Google पर काम करने वाले एक व्यक्ति से बात की और उन्होंने इस समस्या / आवश्यकता को स्वीकार किया, उन्होंने कहा कि उनकी टीम ने जो भी इस्तेमाल किया था वह भारी था और वे इसे जल्द ही आधिकारिक उपकरणों के साथ हल करेंगे।

अधिक पढ़ें:

गो 1.6 में वेंडरिंग

1.6 में प्रायोगिक से वेंडरिंग जारी किया गया है (इस पोस्ट के बाद शुरू में लिखा गया था) जो तीसरे पक्ष के टूल का उपयोग करके विशिष्ट टैग / संकुल के संस्करणों का उपयोग करने की प्रक्रिया को आसान बनाता है। go getअभी भी विशिष्ट टैग या संस्करण लाने के लिए कार्यक्षमता नहीं है।

कैसे काम करता है के बारे में अधिक: विक्रेता फ़ोल्डर को समझना और उपयोग करना

1.11 में मॉड्यूल

गो 1.11 ने निर्भरता प्रबंधन में सुधार के लिए मॉड्यूल नामक एक प्रयोगात्मक सुविधाओं को जारी किया है, वे इसे गो 1.12 में स्थिर के रूप में जारी करने की उम्मीद करते हैं: गो 1.11 में मॉड्यूल के बारे में जानकारी


1
क्या आप Google भाग के बारे में कुछ और बता सकते हैं? गो समुदाय की मेलिंग सूची पर इसकी एक बड़ी चर्चा है, क्या कोई अन्य दिशा है जिसकी चर्चा वहां नहीं की गई है?
Not_a_Golfer

1
@Not_a_Golfer यह एक ऐसा व्यक्ति था जो Go टीम का हिस्सा नहीं था, लेकिन इस बारे में बात की कि वे वर्तमान में आंतरिक रूप से वेंडरिंग का उपयोग करते हैं और यह काफी भारी था। इसलिए उन्हें आधिकारिक उपकरणों के साथ इसे बेहतर तरीके से हल करने में रुचि थी। यह एक अनौपचारिक बयान था, हालांकि, यह अधिक स्पष्ट कर देगा।
रॉबिन एंडरसन

2
AFAIK, केवल प्रस्ताव एक आधिकारिक विक्रेता / निर्भरता फ़ाइल प्रारूप के लिए है। यह अभी भी बहुत अच्छा है, उस परियोजना में एक निर्भरता उपकरण से बंधा नहीं होगा, और वे जो भी समाधान चाहते हैं, उसके साथ हस्तक्षेप कर सकते हैं (यानी मैं संशोधन लॉक करना पसंद करता हूं, जबकि अन्य व्यक्ति पसंद करते हैं)।
जिमब मेव

मॉड्यूल कोड संकलक पर निर्भरता के साथ वास्तव में सौदा नहीं करते हैं, जो हमें फ़ोक वर्जन के साथ कहीं और प्रोटॉक-जीन-गो प्राप्त करने के लिए उपयोग करने के लिए मजबूर करता है। इस प्रकार हमें 2 अलग-अलग स्थानों में एक ही संस्करण का ट्रैक रखने की आवश्यकता है (क्योंकि पुस्तकालय कसकर जनरेटर के साथ मिलकर हैं)
मार्टिन कोसिके

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

स्पष्टीकरण:

  • उपरोक्त कोड NSQ v1.1.0 और निर्माण को खींचता है nsqd
  • go mod init .go.modवर्तमान निर्देशिका में एक फ़ाइल बनाता है , जो go getसंशोधन / टैग के साथ उपयोग करने में सक्षम बनाता है । ( इस लिंक को देखें )
  • -d का अर्थ है "केवल डाउनलोड करें", यदि आप एक सीधी स्थापना चाहते हैं, तो इस ध्वज को छोड़ दें और इस पंक्ति के नीचे निर्मित कमांड करें।
  • -v का अर्थ है "वाचाल होना"।
  • उपरोक्त कोड विंडोज के लिए है। यदि आप लिनक्स का उपयोग करते हैं, तो bin/nsqd.exeसाथ बदलें bin/nsqd

डाउनलोड किया गया मॉड्यूल अंदर संग्रहीत है %GOPATH%\pkg\mod। यदि आप अपनी GOPATHनिर्देशिका को प्रदूषित नहीं करना चाहते हैं , तो एक नया बनाएं और GOPATHइसे सेट करें ।


4
1.13 में, go mod initएक मॉड्यूल आईडी की जरूरत है, जैसेgo mod init local/build
धनु राशि में

11

मुझे इसमें सफलता मिली है:

  • टैग के बिना गेट कमांड चलाएं - यह मास्टर शाखा को क्लोन करना चाहिए।
  • क्लोन डायरेक्टरी में जाएं और उस टैग या शाखा को चेक करें जिसे आप चाहते हैं।
  • फिर से जाओ कमांड प्राप्त करें, इसे चेक आउट शाखा पर कमांड को संसाधित करना चाहिए।

4
पहले रन पर आप go get -d <git-url>संकुल को डाउनलोड करने और संस्थापन को छोड़ने के लिए उपयोग कर सकते हैं ।
वेबवार्स्ट

जब आपको किसी विशिष्ट टैग की आवश्यकता होती है तो इसका उपयोग किया जाना चाहिए, gopkg.in बहुत अधिक प्रतिबंधक है।
हृषिकेश कुमार

4

यह सवाल गो मॉड्यूल्स से संबंधित है, लेकिन भविष्य के संदर्भ के लिए एक विशिष्ट संस्करण लाने के लिए गो 1.11 में सही प्रक्रिया यह है:

go get github.com/influxdb@[version]

या एक विशिष्ट git टैग प्राप्त करने के लिए:

go get github.com/influxdb@[gitref]


1

मेरे पास इस समस्या को दूर करने के लिए एक (कुछ हद तक काम करने वाला, लेकिन काम करने वाला) तरीका है, कम से कम गिट रिपॉजिटरी के लिए: जैसा कि गेट गेट'एड पैकेज सामान्य स्रोत नियंत्रण रिपॉजिटरी हैं, कोई भी सामान्य गिट टूल का उपयोग करके टैग्स की जांच कर सकता है (कमांड लाइन के लिए गिट का उपयोग कर सकते हैं) , मैं एटलसियन सोर्सट्री का उपयोग कर रहा हूं)।

अपने टीम के साथियों के साथ अपने पैकेज कॉन्फ़िगरेशन को साझा करने के लिए, मैंने अपने GOPATH के बाहर एक git रिपॉजिटरी बनाई है । मैंने तब सभी पैकेजों को जोड़ा (कम से कम जिन्हें मैं इस तरह से प्रबंधित करना चाहता था) ने इस रेपो को गिट सबमॉड्यूल के रूप में दिया। इसके लिए आपको बाहर निकलने वाले रेपो फोल्डर को रास्ते से हटाना होगा और उन्हें जीआईट सबमॉड्यूल के रूप में फिर से जोड़ना होगा, जिससे गिट को भ्रमित न किया जा सके। यह प्रक्रिया कुछ हद तक थकाऊ है, लेकिन परेशानी के लायक साबित हुई है:

अब मैं अपने GOPATH- रेपो को हर उस समय के लिए प्रतिबद्ध कर सकता हूं, जिसे मैं एक नए गो पैकेज का उपयोग करता हूं। जब मेरे टीम के साथी इस रेपो से खींचते हैं और एक गिट सबमॉड्यूल अपडेट जारी करते हैं (या बस सॉरेट्री के माध्यम से अपडेट करते हैं, जो यह स्वचालित रूप से करता है), पैकेज का उनका संस्करण उसी टैग पर चेक आउट हो जाता है जैसा मेरा है।

बेशक यह केवल git स्रोत नियंत्रण के तहत संकुल के लिए काम करता है ...


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.