Próbuję skompilować bazę danych InfluxDB (wersja v0.8.8) przy użyciu go get github.com/influxdb/influxdb
Ale to ściąga gałąź główną i potrzebuję v0.8.8
tagu.
Próbowałem to zrobić: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
ale to nie powiedzie się, mówiąc nie mogę znaleźć.
Próbowałem też zrobić regularny go get
oddziału głównego, a następnie ręcznie sprawdzanie tag korzystając git
z GOPATH/src/github...
aby ustawić wersję Corret.
Problem z użyciem ostatniego podejścia polega na tym, że kiedy próbuję wyciągnąć za jego pomocą zależności go get -u -f ./...
, próbuje je znaleźć w gałęzi master, a niektóre z nich nie istnieją w gałęzi master ...
TL; DR : wykonaj go get
na określonym tagu github i pobierz poprawne zależności.
go get
, a nie jak go utworzyć.Odpowiedzi:
Nie jest możliwe użycie tego
go get
narzędzia. Zamiast tego musisz użyć zewnętrznego narzędzia do zarządzania pakietami go lub utworzyć własne rozwidlenia dla pakietów, którymi chcesz zarządzać bardziej szczegółowo.Rozmawiał z facetem, który pracuje w Google i przyznał się do tego problemu / wymagania, powiedział, że sprzedawca, z którego korzystał jego zespół, był nieporęczny i prawdopodobnie wkrótce rozwiąże go za pomocą oficjalnych narzędzi.
Czytaj więcej:
Vendoring in Go 1.6
Vendoring został zwolniony z eksperymentalnej wersji go 1.6 (po tym, jak ten post został napisany), co ułatwia proces używania określonych tagów / wersji pakietów przy użyciu narzędzi innych firm.
go get
nadal nie ma funkcji pobierania określonych tagów lub wersji.Więcej o tym, jak działa sprzedawca: Zrozumienie i korzystanie z folderu dostawcy
Moduły w Go 1.11
Go 1.11 wypuściło eksperymentalne funkcje zwane modułami w celu poprawy zarządzania zależnościami, mają nadzieję, że udostępnią je jako stabilne w Go 1.12: Informacje o modułach w Go 1.11
źródło
go mod
jest już dostępna.Dla tych, którzy muszą zbudować plik binarny określonego tagu , oto moja droga:
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
Wyjaśnienie:
nsqd
.go mod init .
tworzygo.mod
plik w bieżącym katalogu, co umożliwia korzystaniego get
z wersji / tagów. (zobacz ten link )-d
oznacza „tylko pobieranie”, jeśli chcesz przeprowadzić bezpośrednią instalację, pomiń tę flagę i polecenia budowania poniżej tej linii.-v
oznacza „być gadatliwym”.bin/nsqd.exe
zbin/nsqd
.Pobrany moduł jest przechowywany w plikach
%GOPATH%\pkg\mod
. Jeśli nie chcesz zanieczyszczać swojegoGOPATH
katalogu, utwórz nowy i ustaw swójGOPATH
.źródło
go mod init
potrzebny jest identyfikator modułu, np.go mod init local/build
Odniosłem sukces z tym:
źródło
go get -d <git-url>
po prostu pobrać pakiety i pominąć instalację.To pytanie poprzedza moduły Go, ale dla przyszłego odniesienia poprawna procedura pobierania określonej wersji w Go 1.11 jest następująca:
go get github.com/influxdb@[version]
Lub aby uzyskać określony tag git:
go get github.com/influxdb@[gitref]
źródło
Mam (nieco hakerskie, ale działające) podejście do rozwiązania tego problemu, przynajmniej w przypadku repozytoriów git: Jak idą pakiety get'ed są normalnymi repozytoriami kontroli źródła, można sprawdzić tagi używając zwykłych narzędzi git (można użyć git z wiersza poleceń , Używam Atlassian SourceTree).
Aby udostępnić moją konfigurację pakietu moim kolegom z zespołu, utworzyłem repozytorium git z mojego GOPATH . Następnie dodałem wszystkie pakiety (przynajmniej te, którymi chciałem zarządzać w ten sposób) do tego repozytorium jako podmoduł git. Wymaga to usunięcia istniejących folderów repozytorium i ponownego dodania ich jako modułu podrzędnego git, aby nie mylić git. Ten proces jest nieco żmudny, ale okazał się wart zachodu:
Teraz mogę zatwierdzać i przesyłać do mojego repozytorium GOPATH za każdym razem, gdy używam nowego pakietu go. Kiedy moi koledzy z zespołu wyciągają z tego repozytorium i wydają aktualizację modułu podrzędnego git (lub po prostu aktualizują za pośrednictwem SoureTree, co robi to automatycznie), ich wersja pakietu zostanie pobrana na tym samym tagu co moja.
Oczywiście działa to tylko dla pakietów pod kontrolą źródła git ...
źródło
Wtyczka maven golang pozwala na zabawę z gałęzią, tagiem i wersją podczas GET, możesz przyjrzeć się jej testowi dla takich przypadków z repozytorium GIT
źródło