Bir github havuzunun belirli bir etiketine "git" nasıl yapılır?


89

InfluxDB veritabanını (sürüm v0.8.8) kullanarak derlemeye çalışıyorum go get github.com/influxdb/influxdb

Ama bu ana dalı çekiyor ve v0.8.8etikete ihtiyacım var .

Yapmaya çalıştım: go get github.com/influxdb/influxdb/releases/tag/v0.8.8ancak bu, bulamıyorum demek başarısız.

Ben de normal bir yapmaya çalıştık go getana şubesi ve sonra elle kullanarak etiketi kontrol gitiçinde GOPATH/src/github...corret versiyonunu ayarlamak üzere.

Son yaklaşımı kullanan sorun şu ki, bağımlılıkları çekmeye go get -u -f ./...çalıştığımda onları ana dalda bulmaya çalışıyor ve bazıları ana dalda yok ...

TL; DR : go getbelirli bir github etiketi üzerinde gerçekleştirin ve doğru bağımlılıkları çekin.


Bunu dene .. git etiketi -a v0.8.8 - "Yorumunuz"
Ashok Londhe

2
@AshokLondhe Bir etiketin go getnasıl oluşturulacağını değil, nasıl kullanılacağını soruyor .
wonderb0lt

@ wonderb0lt bu, etiket ekleme komutudur.
Ashok Londhe

Sanırım belirli bir etiketi nasıl kontrol edeceğimi bulmaya çalıştım ve en son denediğimde bunu yapmak mümkün değildi ...
wonderb0lt

1
Göz at bu . Sona doğru slaytlar bazı bağımlılık yönetimi alternatifleri sunuyor.
wonderb0lt

Yanıtlar:


35

go getAracı kullanmak mümkün değildir . Bunun yerine, üçüncü taraf bir paket yönetim aracı kullanmanız veya daha ayrıntılı yönetmek istediğiniz paketler için kendi çatallarınızı oluşturmanız gerekir.

Google'da çalışan bir adamla konuştu ve bu sorunu / gereksinimi kabul etti, ekibinin kullandığı tedarikçinin hantal olduğunu ve muhtemelen yakında resmi araçlarla çözeceklerini söyledi.

Daha fazla oku:

Go 1.6'da Bayilik

Satıcı, üçüncü taraf araçlarını kullanarak paketlerin belirli etiketlerini / sürümlerini kullanma sürecini kolaylaştıran go 1.6 deneysel sürümünden (bu gönderi ilk yazıldıktan sonra) yayınlandı.go gethala belirli etiketleri veya sürümleri getirme işlevine sahip değil.

Satıcının nasıl çalıştığı hakkında daha fazla bilgi: Satıcı klasörünü anlama ve kullanma

Go 1.11'deki Modüller

Go 1.11, bağımlılık yönetimini iyileştirmek için modüller adı verilen deneysel bir özellik yayınladı, Go 1.12'de kararlı olarak yayınlamayı umuyorlar: Go 1.11'deki modüller hakkında bilgiler


1
Google kısmı hakkında biraz daha detay verebilir misin? Go topluluğunun posta listesinde bununla ilgili büyük bir tartışma var, orada tartışılmayan başka bir yön var mı?
Not_a_Golfer

1
@Not_a_Golfer Go ekibinin bir parçası olmayan bir adamdı, ancak şu anda satıcılığı içten kullandıklarını ve oldukça hantal olduğunu söyledi. Bu yüzden resmi araçlarla daha iyi çözmeye ilgilendiler. Resmi olmayan bir açıklama olduğunu düşünüyorum, bunu daha açık hale getirecek.
Robin Andersson 15

2
AFAIK, tek teklif resmi bir satıcı / bağımlılık dosyası formatı içindir. Bu hala harika, çünkü projeler bir bağımlılık aracına bağlı olmayacak ve istedikleri herhangi bir çözümle birlikte çalışabiliyorlar (yani ben revizyon kilitlemeyi tercih ederken, diğerleri tedarikçiliği tercih ediyor).
JimB

modüller, kod derleyicilerine olan bağımlılıkla gerçekten ilgilenmez, bu da bizi go get protoc-gen-go'yu başka bir yerde fix sürümüyle kullanmaya zorlar. Böylelikle aynı sürümlemeyi 2 farklı yerde takip
etmemiz gerekmiyor

24

go mod şu anda mevcuttur.

Belirli bir etiketin ikilisini oluşturması gerekenler için işte benim yolum:

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

Açıklama:

  • Yukarıdaki kod NSQ v1.1.0'ı çeker ve oluşturur nsqd.
  • go mod init .go.modgeçerli dizinde go getrevizyon / etiketlerle kullanılmasını sağlayan bir dosya oluşturur . ( bu bağlantıya bakın )
  • -d "yalnızca indir" anlamına gelir, doğrudan kurulum istiyorsanız, bu bayrağı ve bu satırın altındaki derleme komutlarını atlayın.
  • -v "ayrıntılı olmak" anlamına gelir.
  • Yukarıdaki kod Windows içindir. Linux kullanıyorsanız, yerine bin/nsqd.exeile bin/nsqd.

İndirilen modül içinde saklanır %GOPATH%\pkg\mod. Dizininizi kirletmek istemiyorsanız GOPATH, yeni bir tane oluşturun ve GOPATHona göre ayarlayın .


4
1.13'te, go mod initbir modül kimliğine ihtiyaç var, örneğingo mod init local/build
archie

11

Bununla başarılı oldum:

  • Get komutunu etiketi olmadan çalıştırın - ana dalı klonlaması gerekir.
  • Klon dizinine gidin ve istediğiniz etiketi veya dalı kontrol edin.
  • Go get komutunu tekrar çalıştırın, teslim alınan daldaki komutu işlemelidir.

4
İlk çalıştırmada go get -d <git-url>, sadece paketleri indirmek ve kurulumu atlamak için kullanabilirsiniz.
webwurst

Belirli bir etikete ihtiyacınız olduğunda kullanılması gereken budur, gopkg.in çok kısıtlayıcıdır.
Hrishikesh Kumar

4

Bu soru Go Modüllerinden öncedir, ancak ileride başvurmak için Go 1.11'de belirli bir sürümü getirmek için doğru prosedür şudur:

go get github.com/influxdb@[version]

Veya belirli bir git etiketi almak için:

go get github.com/influxdb@[gitref]


1

En azından git depoları için, bu sorunu çözmek için (biraz hile ama çalışan) bir yaklaşımım var: Go get'ed paketleri normal kaynak kontrol depoları olduğundan, normal git araçlarını kullanarak etiketleri kontrol edebilir (komut satırından git kullanabilirsiniz Atlassian SourceTree kullanıyorum).

Paket yapılandırmamı takım arkadaşlarımla paylaşmak için, GOPATH'ımdan bir git deposu yaptım . Daha sonra tüm paketleri (en azından bu şekilde yönetmek istediklerimi) bu depoya git alt modülü olarak ekledim. Bu, git'i karıştırmamak için mevcut depo klasörlerini yoldan çekip git alt modülü olarak yeniden eklemenizi gerektirir. Bu süreç biraz yorucu, ancak zahmete değdiğini kanıtladı:

Artık yeni bir go paketi kullandığım her zaman GOPATH-depomu taahhüt edebilir ve aktarabilirim. Ekip arkadaşlarım bu depodan çıktığında ve bir git alt modülü güncellemesi yayınladığında (veya bunu otomatik olarak yapan SoureTree aracılığıyla güncellediğinde), paketin sürümleri benimki ile aynı etiket üzerinde kontrol ediliyor.

Tabii ki bu sadece git kaynak kontrolü altındaki paketler için işe yarar ...


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.