रेपो में एक नवीनतम प्रतिबद्ध करने के लिए go.mod में गो मॉड्यूल निर्भरता कैसे इंगित करें?


111

V1.11 के साथ शुरू मॉड्यूल के लिए जोड़ा समर्थन जाओ। आदेश

go mod init <package name>
go build

पैकेज निर्भरता के लिए सभी पाए गए संस्करणों को उत्पन्न go.modऔर go.sumफ़ाइलें उत्पन्न करेगा ।

यदि किसी मॉड्यूल में कोई रिलीज़ नहीं है, तो उस मॉड्यूल की नवीनतम कमिट का उपयोग किया जाता है। यदि कोई मॉड्यूल रिलीज़ करता है, तो नवीनतम को निर्भरता के रूप में चुना जाता है।

हालाँकि कभी-कभी मुझे कार्यक्षमता की आवश्यकता होती है जो अभी तक प्रकाशित प्रकाशन में नहीं है, लेकिन उस रिलीज़ के बाद की गई एक प्रतिबद्धता से। मैं go.modकिसी मॉड्यूल की रिलीज़ के लिए नहीं, बल्कि मॉड्यूल के रिपॉजिटरी में एक विशिष्ट प्रतिबद्धता के लिए कैसे निर्धारित करूं ?

ऐसा लगता है कि मैं इसे go.mod में हाथ से कर सकता हूं

module /my/module

require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)

जहां v0.0.0पिछली बार प्रकाशित रिहाई टैग के अनुरूप नहीं है, 20181121201909हो सकता है एक टाइमस्टैम्प प्रतिबद्ध और af044c0995feहैश प्रतिबद्ध हो सकता है? क्या ऐसी जानकारी हाथ से जानी और दर्ज की जानी चाहिए, या कोई बेहतर तरीका है?

जवाबों:


171

बस आप चाहते हैं कि कमिट हैश में 'जाओ':

go get github.com/someone/some_module@af044c0995fe

'गो गेट' निर्भरता फाइलों को सही ढंग से अपडेट करेगा (go.mod, go.sum)।

अधिक जानकारी: https://github.com/golang/go/wiki/Modules#how-to-upgrad-and-downgrad-d dependencies


4
" अज्ञात संशोधन " या " अमान्य संस्करण " त्रुटि होने पर - सुनिश्चित करें कि आपने पीआर (पुल अनुरोध) का हैश निर्दिष्ट नहीं किया है । यहां तक ​​कि मर्ज किया गया PR गलत भी हो सकता है। रेपो के तहत कमिट हैश की तलाश करें /commits, लेकिन अंडर नहीं /pulls। यहाँ अधिक जानकारी देखें: golang / go # 31191 स्पष्ट रूप से इस तरह के कमेंट्स को फ़िल्टर करता है।
नोआम मानोस

1
ओपी पूछते हैं कि इसे go.mod फ़ाइल में कैसे जोड़ा जाए, न कि कैसे करेंgo get
Nulik

2
@ ऑलीक ओपी द्वारा पूछे गए go getतरीके से अपडेट / ऐड- go.modइन करने का सही तरीका है ।
डेव सी।

95

एक विशिष्ट प्रतिबद्धता प्राप्त करने के लिए उपयोग करने पर एवर्टन के उत्तर के अलावा go get github.com/someone/some_module@af044c0995fe, आप शाखा नामों का भी उपयोग कर सकते हैं जैसे:

  • go get github.com/someone/some_module@master
  • go get github.com/someone/some_module@dev_branch

उन उदाहरणों को संबंधित शाखा पर नवीनतम प्रतिबद्धता मिलती है।

यह अभी भी आपकी फ़ाइल में एक छद्म संस्करण के रूप में दर्ज किया जाएगा go.mod, जैसे कि v0.0.0-20171006230638-a6e239ea1c69। (यह मानक सेवर ऑर्डरिंग के आधार पर सभी संस्करणों के लिए एक सरल कुल ऑर्डर देने में मदद करता है )।


10
छद्म संस्करण स्पष्टीकरण के लिए धन्यवाद। मैं replaceकुछ निर्भरता के एक अस्थायी कांटा का उपयोग करने की कोशिश कर रहा था , लेकिन कुछ लोगों को इंगित करने के लिए उस प्रतिस्थापन को बनाने का कोई तरीका नहीं मिल सका। एक संस्करण टैग बनाने और इसे इस तरह निर्दिष्ट करने के लिए था replace github.com/original/somelib => github.com/fork/somelib v1.2.3, जो थोड़ा बहुत ज्यादा होता है जब मैं बस जल्दी से सामान का परीक्षण करना चाहता हूं। replace github.com/original/somelib => github.com/fork/somelib@commithashऔर replace github.com/original/somelib => github.com/fork/somelib commithashकाम नहीं करते
Zhandos Zhylkaidar

7

मैं कुछ समय से अपना सिर पीट रहा हूं कि यह सभी के लिए कैसे काम करता है और मैं इसे नहीं चला पा रहा हूं। मेरे लिए, मुझे मास्टर ब्रांच के लिए प्रतिबद्ध होना था, तभी मैं इसे प्राप्त करने में सक्षम था।

जाने के लिए विशिष्ट शाखा, प्रतिबद्ध आईडी या टैग के साथ काम करने के लिए, आपको नीचे कमांड चलाकर गो मॉड्यूल के लिए एक ध्वज को सक्षम करना होगा

go env -w GO111MODULE = पर

इसके बाद हम कर पाएंगे

go get repo@branchname
go get repo@tag
go get repo@commithash

3

यदि आप अस्थायी रूप से एक स्थानीय निर्देशिका के लिए एक निर्भरता स्थानापन्न करना चाहते हैं (उदाहरण के लिए यदि आप 2 मॉड्यूल पर काम करते हैं तो) आप फ़ाइल replaceके अंत में विवरण जोड़ सकते हैं go.mod:

module example.com/mypkg

go 1.15

require (
  gitlab.com/someone/a_package v0.14.2
)

replace gitlab.com/someone/a_package => ../my_forks/a_package

2

इसके अलावा, अगर आप go.mod फ़ाइल में टैग के स्थान पर नवीनतम शब्द डालते हैं, तो यह नवीनतम टैग मॉड्यूल में बदल जाएगा।

उदाहरण के लिए:

module /my/module

require (
...
github.com/someone/some_module latest
...
)

हो जाएगा

module /my/module

require (
...
github.com/someone/some_module v2.0.39
...
)

चलने के बाद go mod tidy

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