একটি ব্যক্তিগত ভাণ্ডার "পেতে" যাওয়ার সঠিক উপায় কী?


143

$ go getঅনেক গুগল চেষ্টা করার পরেও আমি ব্যক্তিগত সংগ্রহস্থল নিয়ে কাজ করার উপায়টি অনুসন্ধান করছি ।

প্রথম চেষ্টা:

$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go

হ্যাঁ, এটি মেটা ট্যাগগুলি দেখেনি কারণ লগইন তথ্য কীভাবে সরবরাহ করতে হয় তা আমি জানতে পারি না।

দ্বিতীয় চেষ্টা:

Https://gist.github.com/shurcooL/6927554 অনুসরণ করুন । .Gitconfig এ কনফিগার করুন।

[url "ssh://git@gitlab.com/"]
    insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git

হ্যাঁ এটি কাজ করে তবে .gitআমার প্রকল্পের নাম সহ এক্সটেনশনের সাথে, আমি এটির নামটি মূল নামকরণ করতে পারি তবে $ go getপ্রতিবার এটি করা খুব ভাল নয়, অন্যদিকে কি আছে?


2
আপনি নীচের উত্তরটি অনুসরণ করার পরেও রফতানি নিশ্চিত করুন GOPRIVATE। যেমনexport GOPRIVATE="github.com/steelx/that-private-repo"
স্টিল

উত্তর:


91

আপনার কনফিগার করার জন্য একটি জিনিস রয়েছে। উদাহরণটি গিটহাবের উপর ভিত্তি করে তৈরি হয়েছে তবে প্রক্রিয়াটি পরিবর্তন করা উচিত নয়:

$ git config --global url.git@github.com:.insteadOf https://github.com/
$ cat ~/.gitconfig
[url "git@github.com:"]
    insteadOf = https://github.com/
$ go get github.com/private/repo

ইতিমধ্যে এটি করেছে, এটি করা কেবলমাত্র একটি কনফিগার, catকমান্ড কেবল যাচাই করার জন্য।
সেকমাস্ক

1
এর সাথে একমাত্র ত্রুটিটি হ'ল প্রতিবারের জন্য গ্লোবাল গিট কনফিগারেশনটি পরিবর্তন না করে প্রতিটি হোস্টের জন্য আপনার আলাদা কনফিগারেশন (যেমন আপনি একাধিক সরবরাহকারী ব্যবহার করছেন)। তারপরে described ssh-
জোচিম

1
আমি আশা করি এটি আরও বেশি ভোট হয়েছে। এমনকি পাবলিক রেপসের জন্যও, আমি যেখানে সম্ভব সেখানে এসএসএস ব্যবহার করতে পছন্দ করি, যেহেতু দুটি ফ্যাক্টর পাসওয়ার্ড প্রমাণকে বিশ্রী করে তোলে। এটি সমস্ত গিথব রেপগুলি এসএসএল ইউআরএ স্থির করে। ধন্যবাদ!
ক্যাপচার্যাগ

53

সঠিক উপায় হ'ল ম্যানুয়ালি সঠিকভাবে সংগ্রহস্থল স্থাপন করা। সংগ্রহস্থলটি একবার উপস্থিত হয়ে গেলে আপনি go get -uপ্যাকেজ আপডেট করতে এবং go installইনস্টল করতে ব্যবহার করতে পারেন । একটি প্যাকেজ নামকরণ

github.com/secmask/awserver-go

যাও

$GOPATH/src/github.com/secmask/awserver-go

আপনার টাইপ করা কমান্ডগুলি হ'ল:

cd $GOPATH/src/github.com/secmask
git clone git@github.com:secmask/awserver-go.git

5
@secmask go getসাধারণ ক্ষেত্রে একটি সরঞ্জাম হিসাবে ডিজাইন করা হয়েছে। গো দলটি কনফিগারেশনে যুক্ত করার বিরুদ্ধে স্পষ্টভাবে সিদ্ধান্ত নিয়েছে যাতে লোকেরা তাদের নিজস্ব ক্রাফ্ট রোল না করে মানকে মেনে চলে। এটি আপনার ক্ষেত্রে (যেমন ব্যক্তিগত সংগ্রহস্থল) এর জন্য কখনও তৈরি করা হয়নি।
ফুজ

@ শুদিপ্ত দয়া করে সম্পাদনাগুলি বন্ধ করুন। আপনি যেভাবে চান প্রশ্নগুলি আরও খারাপ দেখাচ্ছে।
ফুজ

চমৎকার ডকুমেন্টেশন। আমার জীবন সংরক্ষিত.
আনিস ভার্গেস

34

আমাদের সংস্থা থেকে গিটল্যাবেgo get ব্যক্তিগত সংগ্রহস্থল ব্যবহার করতে আমার সমস্যা হয়েছিল । সমাধান খুঁজতে গিয়ে কয়েক মিনিট হারিয়েছি lost এবং আমি এটি খুঁজে পেয়েছি:

  1. আপনাকে এখানে একটি ব্যক্তিগত টোকেন পেতে হবে:
    https://gitlab.mycompany.com/profile/account

  2. আপনার ব্যক্তিগত টোকেন সহ অতিরিক্ত শিরোনাম যুক্ত করতে গিটটি কনফিগার করুন:

    $ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
  3. থেকে ধর্মান্তরিত অনুরোধ আপনার Git কনফিগার করুন HTTP থেকে SSH :

    $ git config --global url."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"
  4. অবশেষে আপনি নিজেরটি go getসাধারণত ব্যবহার করতে পারেন :

    $ go get gitlab.com/company/private_repo

3
আকর্ষণীয় ব্যবহার http.extraheader। +1
ভনসি

29
--globalআপনি অনেক রেপো ব্যবহারের ক্ষেত্রে অন্য গিট সার্ভারেও আপনার ব্যক্তিগত টোকেন প্রেরণ করবেন ? কোন নিরাপদ ঝুঁকি?
সেকমাস্ক

কেউ যে কোন পর্যালোচনা? আমি মনে করি এটি প্রকাশ্যে
গিথুব রেপোতে

13

উপরের সমস্ত কিছুই আমার পক্ষে কার্যকর হয়নি। ক্লোনিং রেপো সঠিকভাবে কাজ করছে তবে আমি এখনও একটি unrecognized importত্রুটি পেয়েছি ।

এটি গো v1.13 হিসাবে দাঁড়িয়েছে, আমি ডকটিতে পেয়েছি যে আমাদের GOPRIVATE এনভ ভেরিয়েবলটি এর মতো ব্যবহার করা উচিত :

$ GOPRIVATE=github.com/ORGANISATION_OR_USER_NAME go get -u github.com/ORGANISATION_OR_USER_NAME/REPO_NAME

10

যদি আপনি ইতিমধ্যে SSH ব্যবহার করে Git পান, তাহলে এই উত্তরটি দ্বারা আম্মার Bandukwala একটি সহজ কার্যসংক্রান্ত নেই:


$ go getgitঅভ্যন্তরীণভাবে ব্যবহার করে। নিম্নলিখিত এক liners, করতে হবে gitএবং এর ফলে $ go getSSH- র মাধ্যমে আপনার প্যাকেজ ক্লোন।

GitHub:

$ git config --global url."git@github.com:".insteadOf "https://github.com/"

বিট বালতি:

$ git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"

10

এটি গিটল্যাব ইস্যুর মতো দেখায় 5769

গিটল্যাবে, যেহেতু সংগ্রহস্থলগুলি সর্বদা শেষ হয় .git, .gitকাজকর্মের জন্য অবশ্যই সংগ্রহস্থলের নামের শেষে উল্লেখ করতে হবে, উদাহরণস্বরূপ:

import "example.org/myuser/mygorepo.git"

এবং:

$ go get example.org/myuser/mygorepo.git

দেখে মনে হচ্ছে গিটহাব এটি যুক্ত করে সমাধান করে ".git"

এটি " গো এর সংগ্রহস্থল পুনরুদ্ধারের জন্য যোগ করা সমর্থন " এ সমাধান হওয়ার কথা # 5958 ", প্রদত্ত অধিকার মেটা ট্যাগ জায়গা আছে
যদিও গোতে নিজেই এখানে এখনও একটি সমস্যা রয়েছে: " cmd/go: গো গেট HTML5 নথিগুলিতে মেটা ট্যাগ আবিষ্কার করতে পারে না "।


আসলে তারা (এবং অন্যরা) ইতিমধ্যে মেটা ট্যাগগুলিকে সমর্থন করেছে, তবে এটি কেবল সর্বজনীন রেপোর জন্য কাজ করে (যেখানে go getলগইন ছাড়াই মেটা ট্যাগগুলি দেখতে পারে)
সেকমাস্ক

@secmask যে কারণে আপনি ssh ব্যবহার করছেন: শংসাপত্রগুলি সেভাবে সরবরাহ করতে।
ভনসি

ওহ, কেবলমাত্র অপশনটি, আমি HTTP, https তে ব্যবহার করতে পারি তবে go getকমান্ডটি দেখতে পাবেন go get gitlab.com/secmask/awserver-go.git.git(HTTP এর প্রাথমিক প্রমাণকে জিজ্ঞাসা করবে), যা দেখতেও ভাল লাগে না।
সেকমাস্ক

8

এখানে একটি গিথুব অউথ টোকেন তৈরি করুন এবং আপনার গিথব টোকনকে পরিবেশের পরিবর্তনশীল হিসাবে রফতানি করুন:

export GITHUB_TOKEN=123

বেসিক লেখার url ব্যবহার করতে গিট কনফিগারেশন সেট করুন:

git config --global url."https://$GITHUB_TOKEN:x-oauth-basic@github.com/".insteadOf "https://github.com/"

এখন আপনি go getআপনার ব্যক্তিগত রেপো করতে পারেন ।


5

আমি একটি ব্যবহারকারী নির্দিষ্ট ssh-config তৈরি করেছি, তাই আমার ব্যবহারকারী স্বয়ংক্রিয়ভাবে সঠিক শংসাপত্র এবং কী দিয়ে লগ ইন করে।

প্রথমে আমার একটি কী-জুড়ি তৈরি করা দরকার

ssh-keygen -t rsa -b 4096 -C "my@email.here"

এবং এটি যেমন সংরক্ষণ করা ~/.ssh/id_my_domain। দ্রষ্টব্য যে এটি আমার গিথুব অ্যাকাউন্টের সাথে সংযুক্ত কিপাইয়ার (ব্যক্তিগত এবং পাবলিক), তাই আমার মধ্যে সঞ্চিত আছে ~/.ssh/id_github_com

আমি তখন ~/.ssh/configএকটি এন্ট্রি সহ ডাকা একটি ফাইল তৈরি করেছি (বা পরিবর্তিত) :

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_github_com

অন্য সার্ভারে, "ssh-url" হল admin@domain.com:username/private-repo.gitএবং এই সার্ভারটির জন্য এন্ট্রিটি হ'ল :

Host domain.com
    HostName domain.com
    User admin
    IdentityFile ~/.ssh/id_domain_com

শুধু নির্মল আপনি যে নিশ্চিত দরকার User, Hostএবং HostNameসঠিকভাবে সেট করা হয়।

এখন আমি কেবল চলার পথে ব্রাউজ করতে পারি এবং তারপরে go get <package>, যেমন go get mainফাইলটি main/main.goপ্যাকেজটি অন্তর্ভুক্ত করে (উপরের শেষ উদাহরণ থেকে) domain.com:username/private-repo.git


আপনি go get hostname.com/username/repo.gitএটির সাথে সরাসরি একটি প্যাকেজ আমদানি করতে পারেন: (.git এক্সটেনশন অত্যন্ত গুরুত্বপূর্ণ)।
জোচিম

এক্সটেনশন ছাড়াই এটি করার কোনও উপায় আছে .gitএবং কেন তা ঘটে?
ক্রিশ্চিয়ান চ্যাপারো এ।

1
আকর্ষণীয়, কারণ কারণ আমি রেপো পেতে সক্ষম হবেন না থাকলে .gitএক্সটেনশন এটা আমার স্থানীয় Git কনফিগারেশনের উপর যে ছিল, git config --global url."git@gitlab.myserver.com:".insteadOf "https://gitlab.myserver.com/"কিন্তু সাবডোমেন gitlab.myserver.comSSL শংসাপত্র নেই, তাই আমি ব্যবহার httpপরিবর্তে https, এখন দ্বারা
ক্রিস্টিয়ান চ্যাপারো এ।

3

আমি জুড়ে এসে .netrcএটি এটি সম্পর্কিত বলে মনে করি found

~/.netrcনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল তৈরি করুন :

machine github.com
    login <github username>
    password <github password or Personal access tokens >

সম্পন্ন!

অতিরিক্ত হিসাবে, সর্বশেষতম জিও সংস্করণগুলির জন্য আপনার এটিকে পরিবেশের ভেরিয়েবলগুলিতে GOPRIVATE=github.com যুক্ত করতে হবে (আমি এটি আমার সাথে যুক্ত করেছি .zshrc)

netrc এইচটিটিপিএসের জন্য আমার ব্যক্তিগত গিথুব অ্যাক্সেসটি এখন মেশিন জুড়ে ব্যবহারের জন্য কনফিগার করা হয়েছে (ঠিক আমার এসএসএইচ কনফিগারেশনের মতো) আমার বিকাশের পরিবেশ সেটআপটি আরও ভাল করে তোলে।

গিটহাবের ব্যক্তিগত অ্যাক্সেস টোকেনগুলি তৈরি করুন: https://github.com/settings/tokens

আপনি যদি এসএসএইচ প্রমাণীকরণের সাথে লেগে থাকতে চান, তবে জোর করে ssh ব্যবহার করার অনুরোধটি মাস্ক করুন

git config --global url."git@github.com:".insteadOf "https://github.com/"

গিট অ্যাক্সেস স্থাপনের আরও পদ্ধতি: https://gist.github.com/technoweenie/1072829#gistcomment-2979908

উইন্ডোতে গিটের সাথে বিশেষভাবে ব্যবহারের জন্য ম্যান পৃষ্ঠাটি এবং এই উত্তরটি দেখুন


2

আমার জন্য, অন্যদের দ্বারা প্রদত্ত সমাধানগুলি পরে নিম্নলিখিত ত্রুটিটি দিয়েছে go get

git@gl.nimi24.com: অনুমতি অস্বীকার করা হয়েছে (পাবলিককি)। মারাত্মক: দূরবর্তী সংগ্রহস্থল থেকে পড়া যায়নি। দয়া করে নিশ্চিত হয়ে নিন যে আপনার কাছে সঠিক অ্যাক্সেসের অধিকার রয়েছে এবং ভান্ডার রয়েছে।

এই সমাধান কি প্রয়োজন

  1. যেমনটি অন্যরা বলেছেন:

    git config --global url."git@github.com:".insteadOf "https://github.com/"

  2. আমার ./ssh/id_rsaকী থেকে পাসফ্রেজ সরানো হচ্ছে যা সংগ্রহস্থলের সংযোগটি প্রমাণ করার জন্য ব্যবহৃত হয়েছিল। প্রতিক্রিয়া হিসাবে অনুরোধ জানানো হলে খালি পাসওয়ার্ড প্রবেশ করে এটি করা যেতে পারে:

    ssh-keygen -p

কেন এই কাজ করে

এটি কোনও সুন্দর কাজ নয় কারণ আপনার ব্যক্তিগত কীতে পাসফ্রেজ রাখা সর্বদা ভাল তবে এটি ওপেনএসএইচএইচ-এর ভিতরে কোথাও সমস্যা সৃষ্টি করেছিল।

go getঅভ্যন্তরীণ গিট ব্যবহার করে, যা সংযোগ খোলার জন্য ওপেনশ ব্যবহার করে। ওপেনএসএইচ থেকে প্রমাণীকরণের জন্য প্রয়োজনীয় শংসাপত্র গ্রহণ করে .ssh/id_rsa। কমান্ড লাইন থেকে গিট কমান্ডগুলি কার্যকর করার সময় কোনও এজেন্ট আপনার জন্য id_rsa ফাইল খোলার যত্ন নিতে পারে যাতে আপনাকে প্রতিবারের মতো পাসফ্রেজ নির্দিষ্ট করতে হবে না, তবে যখন গেট গেটের পেটে মৃত্যুদন্ড কার্যকর করা হবে তখন এটি আমার কিছুতেই কাজ করেনি কেস। ওপেনএসএইচ আপনাকে একটি পাসওয়ার্ডের জন্য অনুরোধ করতে চায় তবে যেহেতু এটি কীভাবে বলা হয়েছিল তার কারণে এটি সম্ভব নয়, এটি এটির ডিবাগ লগতে মুদ্রণ করে:

পঠন পাসফ্রেজ: / dev / tty খুলতে পারে না: এই জাতীয় কোনও ডিভাইস বা ঠিকানা নেই

এবং শুধু ব্যর্থ। আপনি কী ফাইলটি থেকে পাসফ্রেজটি সরিয়ে ফেললে ওপেনএসএসএইচ প্রম্পট ছাড়াই আপনার কীতে পৌঁছে যাবে এবং এটি কাজ করে

এটি একই সাথে গিথুবের সাথে একযোগে একাধিক এসএসএইচ সংযোগ খোলার ( এই নিবন্ধে বর্ণিত হিসাবে ) গো সংযোগের কারণে হতে পারে । এটি কিছুটা এই সত্য দ্বারা সমর্থিত যে ওপেনএসএসএইচ ডিবাগ লগটি সংগ্রহস্থলটির সাফল্যের সাথে প্রাথমিক সংযোগটি দেখিয়েছিল, তবে পরে এটি কোনও কারণে আবার চেষ্টা করে এবং এবার একটি পাসফ্রেজ জিজ্ঞাসা করার সিদ্ধান্ত নেয়।

তবে উল্লিখিত নিবন্ধে যেমন বলা হয়েছে এসএসএইচ সংযোগ মাল্টিপ্লেক্সিংয়ের সমাধানটি আমার পক্ষে কার্যকর হয়নি। রেকর্ডের জন্য, লেখক প্রভাবিত হোস্টের জন্য ssh কনফিগ ফাইলে কোলিং কনফেয়ার যুক্ত করার পরামর্শ দিয়েছিলেন:

  ControlMaster auto
  ControlPersist 3600
  ControlPath ~/.ssh/%r@%h:%p

তবে যেমনটি বলা হয়েছে, আমার পক্ষে এটি কার্যকর হয়নি, সম্ভবত আমি এটি ভুল করেছিলাম

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