Saya mencoba untuk mengkompilasi database InfluxDB (versi v0.8.8) menggunakan go get github.com/influxdb/influxdb
Tapi ini menarik cabang utama, dan saya membutuhkan v0.8.8
labelnya.
Saya telah mencoba melakukan: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
tetapi ini gagal mengatakan tidak dapat menemukan.
Saya juga mencoba untuk melakukan rutin go get
dari cabang master, dan kemudian secara manual memeriksa tag menggunakan git
di GOPATH/src/github...
dalam rangka untuk mengatur versi corret.
Masalah yang menggunakan pendekatan terakhir adalah ketika saya mencoba menarik dependensi go get -u -f ./...
dengannya mencoba menemukannya di cabang master, dan beberapa di antaranya tidak ada di cabang master ...
TL; DR : lakukan go get
pada tag github tertentu, dan tarik dependensi yang benar.
go get
, bukan cara membuatnya.Jawaban:
Tidak mungkin menggunakan
go get
alat ini. Sebagai gantinya Anda perlu menggunakan alat manajemen paket go pihak ketiga atau membuat garpu Anda sendiri untuk paket-paket yang ingin Anda kelola dengan lebih baik.Berbicara kepada seorang pria yang bekerja di Google dan dia mengakui masalah / persyaratan ini, dia mengatakan bahwa vending yang digunakan timnya sangat besar dan mereka mungkin akan segera menyelesaikannya dengan alat resmi.
Baca lebih banyak:
Vendor di Go 1.6
Vendoring telah dirilis dari percobaan di go 1.6 (setelah posting ini awalnya ditulis) yang membuat proses penggunaan tag / versi tertentu dari paket menggunakan alat pihak ketiga lebih mudah.
go get
masih tidak memiliki fungsi untuk mengambil tag atau versi tertentu.Lebih lanjut tentang cara kerja vendor : Memahami dan menggunakan folder vendor
Modul di Go 1.11
Go 1.11 telah merilis fitur eksperimental yang disebut modul untuk meningkatkan manajemen ketergantungan, mereka berharap untuk merilisnya sebagai stabil di Go 1.12: Informasi tentang modul di Go 1.11
sumber
go mod
tersedia sekarang.Bagi mereka yang perlu membangun biner dari tag tertentu , inilah cara saya:
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
Penjelasan:
nsqd
.go mod init .
membuatgo.mod
file di direktori saat ini, yang memungkinkan penggunaango get
dengan revisi / tag. (lihat tautan ini )-d
berarti "hanya unduh", jika Anda ingin pemasangan langsung, hilangkan tanda ini dan perintah build di bawah baris ini.-v
berarti "bertele-tele".bin/nsqd.exe
denganbin/nsqd
.Modul yang diunduh disimpan di
%GOPATH%\pkg\mod
. Jika Anda tidak ingin mencemariGOPATH
direktori Anda , buat yang baru dan setelGOPATH
ke direktori Anda .sumber
go mod init
membutuhkan id modul, misalnyago mod init local/build
Saya telah sukses dengan ini:
sumber
go get -d <git-url>
untuk hanya mengunduh paket dan melewati penginstalan.Pertanyaan ini mendahului Go Modules, tetapi untuk referensi di masa mendatang, prosedur yang benar di Go 1.11 untuk mengambil versi tertentu adalah ini:
go get github.com/influxdb@[version]
Atau untuk mendapatkan tag git tertentu:
go get github.com/influxdb@[gitref]
sumber
Saya memiliki pendekatan (agak hack, tetapi berfungsi) untuk mengatasi masalah ini, setidaknya untuk repositori git: Karena paket go get'ed adalah repositori kontrol sumber yang normal, seseorang dapat memeriksa tag menggunakan alat git normal (dapat menggunakan git dari baris perintah , Saya menggunakan Atlassian SourceTree).
Untuk membagikan konfigurasi paket saya dengan rekan satu tim, saya telah membuat repositori git dari GOPATH saya . Saya kemudian menambahkan semua paket (setidaknya yang ingin saya kelola dengan cara ini) ke repo ini sebagai git submodule. Ini mengharuskan Anda untuk memindahkan folder repo yang ada dan menambahkannya kembali sebagai git submodule, agar git tidak bingung. Proses ini agak membosankan, tetapi terbukti sepadan dengan masalahnya:
Sekarang saya dapat berkomitmen dan mendorong ke repo GOPATH saya setiap kali saya menggunakan paket go baru. Ketika rekan satu tim saya menarik dari repo ini dan mengeluarkan pembaruan git submodule (atau hanya memperbarui melalui SoureTree, yang melakukan ini secara otomatis), versi paket mereka diperiksa pada tag yang sama dengan milik saya.
Tentu saja ini hanya berfungsi untuk paket di bawah kendali sumber git ...
sumber
Plugin maven golang memungkinkan untuk bermain dengan cabang, tag dan revisi selama GET, Anda dapat melihat pengujiannya untuk kasus seperti itu dengan repositori GIT
sumber