Saya mencari cara untuk mendapatkan $ go get
pekerjaan dengan repositori pribadi, setelah banyak google mencoba.
Percobaan pertama:
$ 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
Yap, itu tidak melihat meta tag karena saya tidak tahu bagaimana memberikan informasi login.
Percobaan kedua:
Ikuti https://gist.github.com/shurcooL/6927554 . Tambahkan config ke .gitconfig.
[url "ssh://[email protected]/"]
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
Ya itu bekerja tetapi dengan .git
ekstensi dengan nama proyek saya, saya dapat mengubah nama menjadi asli tetapi melakukannya setiap kali $ go get
tidak begitu baik, apakah ada cara lain?
GOPRIVATE
juga. misalnyaexport GOPRIVATE="github.com/steelx/that-private-repo"
Jawaban:
Anda memiliki satu hal untuk dikonfigurasikan. Contoh ini didasarkan pada GitHub tetapi ini seharusnya tidak mengubah proses:
sumber
cat
perintah hanya untuk memverifikasi.Cara yang tepat adalah menempatkan repositori secara manual di tempat yang tepat. Setelah repositori ada, Anda dapat menggunakan
go get -u
untuk memperbarui paket dango install
menginstalnya. Paket bernamapergi ke
Perintah yang Anda ketikkan adalah:
sumber
go get
dirancang sebagai alat untuk kasus umum. Tim Go secara eksplisit memutuskan untuk tidak menambah kemungkinan konfigurasi sehingga orang-orang mematuhi standar alih-alih meluncurkan cruft mereka sendiri. Itu tidak pernah dibuat untuk kasus yang Anda miliki (yaitu repositori pribadi).Saya punya masalah dengan
go get
menggunakan repositori pribadi di gitlab dari perusahaan kami. Saya kehilangan beberapa menit mencoba menemukan solusi. Dan saya memang menemukan yang ini:Anda perlu mendapatkan token pribadi di:
https://gitlab.mycompany.com/profile/account
Konfigurasikan Anda git untuk menambahkan tajuk tambahan dengan token pribadi Anda:
Konfigurasikan git Anda untuk mengonversi permintaan dari http ke ssh :
Akhirnya Anda dapat menggunakan Anda secara
go get
normal:sumber
http.extraheader
. +1--global
juga akan mengirim token pribadi Anda ke server git lain jika Anda menggunakan banyak repo? ada risiko aman?Semua hal di atas tidak berhasil untuk saya. Mengkloning repo berfungsi dengan benar tetapi saya masih mendapatkan
unrecognized import
kesalahan.Seperti singkatan dari Go v1.13, saya menemukan dalam dokumen bahwa kita harus menggunakan variabel env GOPRIVATE seperti:
sumber
Jika Anda sudah mendapatkan git menggunakan SSH, jawaban ini oleh Ammar Bandukwala adalah solusi sederhana:
$ go get
gunakan secaragit
internal. Baris berikut akan dibuatgit
dan konsekuensinya$ go get
mengkloning paket Anda melalui SSH.Github:
BitBucket:
sumber
Itu terlihat seperti masalah GitLab 5769 .
Itu seharusnya diselesaikan dalam “ Dukungan tambahan untuk pengambilan repositori Go. # 5958 ", asalkan tag meta yang tepat tersedia .
Meskipun masih ada masalah untuk Go sendiri: "
cmd/go
: go get tidak dapat menemukan tag meta di dokumen HTML5 ".sumber
go get
dapat melihat meta tag tanpa login)go get
perintah akan terlihat sepertigo get gitlab.com/secmask/awserver-go.git.git
(akan meminta otentikasi dasar http), yang terlihat tidak baik juga.Buat token github oauth di sini dan ekspor token github Anda sebagai variabel lingkungan:
Set git config untuk menggunakan url auth dasar:
Sekarang Anda dapat
go get
repo pribadi Anda.sumber
Saya telah membuat ssh-config khusus pengguna, jadi pengguna saya otomatis masuk dengan kredensial dan kunci yang benar.
Pertama saya perlu membuat pasangan kunci
dan menyimpannya ke mis
~/.ssh/id_my_domain
. Perhatikan bahwa ini juga keypair (pribadi dan publik) yang saya sambungkan ke akun Github saya, jadi akun saya disimpan di~/.ssh/id_github_com
.Saya kemudian telah membuat (atau mengubah) file yang disebut
~/.ssh/config
dengan entri:Di server lain, "ssh-url" adalah
[email protected]:username/private-repo.git
dan entri untuk server ini adalah:Hanya untuk mengklarifikasi bahwa Anda perlu memastikan bahwa
User
,Host
danHostName
diatur dengan benar.Sekarang saya bisa menjelajah ke jalan masuk dan kemudian
go get <package>
, misalnya digo get main
mana file tersebutmain/main.go
menyertakan paket (dari contoh terakhir di atas)domain.com:username/private-repo.git
.sumber
go get hostname.com/username/repo.git
(ekstensi .git sangat penting)..git
dan mengapa itu terjadi?.git
ekstensi itu karena konfigurasi git lokal sayagit config --global url."[email protected]:".insteadOf "https://gitlab.myserver.com/"
,, tetapi subdomaingitlab.myserver.com
tidak memiliki sertifikasi ssl, jadi saya menggunakanhttp
alih-alihhttps
, sekarangSaya menemukan
.netrc
dan menemukan itu relevan dengan ini.Buat file
~/.netrc
dengan konten berikut:Selesai!
Selain itu, untuk versi GO terbaru, Anda mungkin perlu menambahkan ini ke variabel lingkungan
GOPRIVATE=github.com
(saya telah menambahkannya ke saya.zshrc
)netrc
juga membuat pengaturan lingkungan pengembangan saya lebih baik karena akses github pribadi saya untuk HTTPS telah dikonfigurasi sekarang untuk digunakan di mesin (seperti konfigurasi SSH saya).Hasilkan token akses pribadi GitHub: https://github.com/settings/tokens
Jika Anda ingin tetap menggunakan otentikasi SSH, maka sembunyikan permintaan untuk menggunakan ssh dengan paksa
git config --global url."[email protected]:".insteadOf "https://github.com/"
Metode lainnya untuk mengatur akses git: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
Lihat halaman manual dan jawaban ini untuk penggunaannya dengan Git di Windows secara khusus
sumber
Bagi saya, solusi yang ditawarkan oleh orang lain masih memberikan kesalahan berikut selama
go get
Apa solusi ini diperlukan
Seperti yang dinyatakan oleh orang lain:
git config --global url."[email protected]:".insteadOf "https://github.com/"
Menghapus frasa sandi dari
./ssh/id_rsa
kunci saya yang digunakan untuk mengautentikasi koneksi ke repositori. Ini dapat dilakukan dengan memasukkan kata sandi kosong ketika diminta sebagai respons terhadap:ssh-keygen -p
Kenapa ini bekerja?
Ini bukan solusi yang cukup bagus karena selalu lebih baik memiliki frasa sandi pada kunci pribadi Anda, tetapi hal itu menyebabkan masalah di suatu tempat di dalam OpenSSH.
go get
menggunakan internal git, yang menggunakan openssh untuk membuka koneksi. OpenSSH mengambil sertifikat yang diperlukan untuk otentikasi.ssh/id_rsa
. Ketika mengeksekusi perintah git dari baris perintah, seorang agen dapat membuka file id_rsa untuk Anda sehingga Anda tidak harus menentukan frasa sandi setiap kali, tetapi ketika dieksekusi di dalam perut, dapatkan, ini tidak bekerja di saya. kasus. OpenSSH ingin memberi Anda kata sandi, tetapi karena itu tidak mungkin karena bagaimana namanya, ia mencetak ke log debug-nya:Dan gagal. Jika Anda menghapus frasa sandi dari file kunci, OpenSSH akan membuka kunci Anda tanpa prompt itu dan berfungsi
Ini mungkin disebabkan oleh Go mengambil modul secara bersamaan dan membuka beberapa koneksi SSH ke Github secara bersamaan (seperti yang dijelaskan dalam artikel ini ). Ini agak didukung oleh fakta bahwa log debug OpenSSH menunjukkan koneksi awal ke repositori berhasil, tetapi kemudian mencobanya lagi untuk beberapa alasan dan kali ini memilih untuk meminta frasa sandi.
Namun solusi menggunakan multiplexing koneksi SSH sebagaimana dikemukakan dalam artikel yang disebutkan tidak bekerja untuk saya. Sebagai catatan, penulis menyarankan menambahkan collowing conf ke file ssh config untuk host yang terpengaruh:
Tetapi seperti yang dinyatakan, bagi saya itu tidak berhasil, mungkin saya salah
sumber