কোনও রেপোতে সর্বশেষ প্রতিশ্রুতিতে go.mod এ গো মডিউল নির্ভরতা কীভাবে নির্দেশ করবেন?


104

V1.11 দিয়ে শুরু করে মডিউলগুলির জন্য সমর্থন যোগ করুন। কমান্ড

go mod init <package name>
go build

উত্পন্ন go.modএবং go.sumফাইল যা প্যাকেজ নির্ভরতার জন্য সমস্ত পাওয়া সংস্করণ রয়েছে।

যদি কোনও মডিউলে কোনও রিলিজ না থাকে তবে সেই মডিউলের সর্বশেষ প্রতিশ্রুতি ব্যবহৃত হয়। যদি কোনও মডিউল প্রকাশিত হয় তবে সর্বশেষতমটিকে নির্ভরতা হিসাবে বেছে নেওয়া হয়েছে।

তবে কখনও কখনও আমার কার্যকারিতা প্রয়োজন যা এখনও প্রকাশিত প্রকাশে নেই, তবে সেই প্রকাশের পরে করা প্রতিশ্রুতি থেকে। আমি go.modমডিউলটির প্রকাশের দিকে নির্দেশ না করে মডিউলটির সংগ্রহস্থলের নির্দিষ্ট প্রতিশ্রুতিতে কীভাবে নির্দেশ করব?

দেখে মনে হচ্ছে যে আমি হাতের সাহায্যে এটি করতে পারি mod

module /my/module

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

v0.0.0সর্বশেষ প্রকাশিত প্রকাশের ট্যাগের সাথে কোথায় মিল নেই, 20181121201909প্রতিশ্রুতিবদ্ধ টাইমস্ট্যাম্প af044c0995feহবে এবং প্রতিশ্রুতিবদ্ধ হ্যাশ হবে? এই জাতীয় তথ্যগুলি হাত দ্বারা সন্ধান করা এবং প্রবেশ করা উচিত, না এর চেয়ে ভাল উপায় আছে?

উত্তর:


157

আপনি যে কমিট করতে চান তা হ'ল 'যান':

go get github.com/someone/some_module@af044c0995fe

'Go get' নির্ভরতা ফাইলগুলি (go.mod, go.sum) সঠিকভাবে আপডেট করবে।

আরও তথ্য: https://github.com/golang/go/wiki/Modules#how-to-up્રેડ- এবং- ডাউনগ্রেড- নির্ভরতা


4
ত্রুটি " অজানা সংশোধন " বা " অবৈধ সংস্করণ " পাওয়ার ক্ষেত্রে - নিশ্চিত হয়ে নিন যে আপনি PR এর হ্যাশ নির্দিষ্ট করেছেন (অনুরোধটি টানুন)। এমনকি একীভূত PR টিও ভুল হতে পারে। রেপোর অধীনে /commitsনা হলেও কমিটের হ্যাশটি সন্ধান করুন /pulls। এখানে আরও তথ্য দেখুন: গোলং / যান # 31191 এই ধরণের কমিটগুলি স্পষ্টভাবে ফিল্টার করে।
নোয়াম মানস

4
ওপিকে কীভাবে এটি করতে হবে তা নয়, Go.mod ফাইলে কীভাবে যুক্ত করবেন তা জিজ্ঞাসা করলেনgo get
নুলিক

4
ওপিকে go getযেভাবে অনুরোধ জানানো হয়েছে তা আপডেট / অ্যাড-টু করার সঠিক উপায় হল নুলিক go.mod
ডেভ সি

94

একটি নির্দিষ্ট অঙ্গীকার পাওয়ার জন্য এভারটনের উত্তর ছাড়াও 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.modv0.0.0-20171006230638-a6e239ea1c69


9
সিউডো-সংস্করণ ব্যাখ্যার জন্য ধন্যবাদ। আমি 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কাজ করবেন না
ঝাঁদোস hyিলকাইদার

6

আমি কিছুক্ষণ ধরে মাথা ঘুরাচ্ছি যে এটি কীভাবে সবার জন্য কাজ করে এবং আমি এটি চালাতে সক্ষম নই। আমার জন্য, আমি মাস্টার শাখায় প্রতিশ্রুতিবদ্ধ ছিল তখনই আমি এটি পেতে সক্ষম হয়েছি।

নির্দিষ্ট শাখার সাথে কাজ করতে যেতে, আইডি বা ট্যাগ কমিট করার জন্য আপনাকে নীচের কমান্ডের মাধ্যমে চলমান গো মডিউলটির জন্য একটি পতাকা সক্ষম করতে হবে

যান env -w GO111MODULE = চালু

এই পরে আমরা করতে সক্ষম হব

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

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

0

এছাড়াও আপনি 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.