Jak wskazać zależność modułu Go w go.mod do najnowszego commita w repo?
Począwszy od wersji 1.11 Go dodano obsługę modułów. Komendy
go mod init <package name>
go build
Generuje pliki go.mod
i go.sum
zawierające wszystkie znalezione wersje zależności pakietu.
Jeśli moduł nie posiada żadnych wydań, używany jest najnowszy commit tego modułu. Jeśli moduł ma wydania, najnowsza jest wybierana jako zależność.
Jednak czasami potrzebowałbym funkcjonalności, która nie znajduje się jeszcze w opublikowanym wydaniu, ale z commita wykonanego po tym uwolnij. Jak ustawić go.mod
, aby wskazywało nie na wydanie modułu, ale na konkretny commit w repozytorium modułu?
module /my/module
require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)
Gdzie v0.0.0
nie odpowiada ostatnio opublikowanemu znacznikowi release, 20181121201909
będzie znacznikiem czasu zatwierdzania, a af044c0995fe
będzie skrótem zatwierdzania? Czy takie informacje należy znaleźć i wprowadzić ręcznie, czy jest lepszy sposób?
5 answers
Po prostu 'go get' na commit hash, który chcesz:
go get github.com/someone/some_module@af044c0995fe
'go get' poprawnie zaktualizuje pliki zależności (go.Mod, idź.suma).
Więcej informacji: https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-08 12:10:29
Dodatkowo odpowiedź od Evertona na użycie go get github.com/someone/some_module@af044c0995fe
aby uzyskać konkretny commit, możesz również użyć nazw gałęzi, takich jak:
-
go get github.com/someone/some_module@master
go get github.com/someone/some_module@dev_branch
Te przykłady pobierają najnowszy commit w odpowiedniej gałęzi.
Nadal będzie zapisana jako pseudo-wersja w pliku go.mod
, np. v0.0.0-20171006230638-a6e239ea1c69
. (Pomaga to zapewnić proste całkowite zamawianie we wszystkich wersjach opartych na standardowym zamawianiu semver ).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-15 20:39:35
[1]}od jakiegoś czasu waliłem w głowę, że to działa na wszystkich i nie jestem w stanie go uruchomić. Dla mnie, musiałem zobowiązać się do master branch wtedy tylko byłem w stanie go zdobyć.
Aby go dostać się do pracy z określoną gałęzią, identyfikatorem lub tagiem zmian, musisz włączyć flagę dla modułu go, uruchamiając poniżej komendę
Go env - w GO111MODULE=on
Po tym będziemy mogli zrobić
go get repo@branchname
go get repo@tag
go get repo@commithash
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-10 12:50:34
Jeśli chcesz tymczasowo zastąpić zależność lokalnym katalogiem (na przykład, jeśli pracujesz na dwóch modułach jednocześnie), możesz dodać polecenie replace
na końcu pliku go.mod
:
module example.com/mypkg
go 1.15
require (
gitlab.com/someone/a_package v0.14.2
)
replace gitlab.com/someone/a_package => ../my_forks/a_package
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-22 14:56:15
Również, jeśli umieścisz słowo najnowsze w miejscu znacznika w go.plik mod zostanie zmieniony na najnowszy tag modułów.
Na przykład:
module /my/module
require (
...
github.com/someone/some_module latest
...
)
Stanie się
module /my/module
require (
...
github.com/someone/some_module v2.0.39
...
)
Po uruchomieniu go mod tidy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-09 14:56:44