Иди получи установку с местного форка
Я пытаюсь установить пакет go из локального каталога (в основном я проверил существующий пакет и применил ожидающий запрос на извлечение).
$ # Both commands give a similar output
$ go get -u file:///Users/me/workspaces/go/somepackage
$ go get -u /Users/me/workspaces/go/somepackage
unrecognized import path "[...]" (import path does not begin with hostname)
поскольку go get
загружается, затем устанавливается, я попытался:
$ go install /Users/me/workspaces/go/somepackage
[] cannot import absolute path
Любой опытный пользователь го может помочь?
3 ответа
Если вы просто хотите использовать другую ветку (вашу PR-ветку), вы можете продолжить использовать исходный путь импорта.
- Сначала возьмите оригинальную упаковку.
- Зайдите в загруженный пакет в вашей локальной файловой системе
cd $GOPATH/pkg/<package directory>
- Из локального кэша пакетов переключитесь на ветку, из которой вы хотите извлечь.
git checkout <PR branch>
- Сейчас
go get -u <package>
Если пакет доступен локально, go get update просто извлечет последний код из ветки, в которую вы получили локальный пакет.
Насколько я знаю, вы не можете сделать это с go get
Кроме того, вы можете скопировать каталог в GOPATH вручную. Если вы раздвоили example.com/somepackage
затем скопируйте /Users/me/workspaces/go/somepackage
в ~/go/src/example.com/somepackage
или же ./vendor/example.com/somepackage
,
При этом, как правило, лучшее решение - разместить где-то раздвоенный код, а затем использовать этот путь импорта. Инструменты приличия, такие как dep и modules, поддерживают выборку разных источников для пакетов.
Я могу ошибаться и, возможно, существует обходной путь
Перейти документация на cmd/go/#hdr-Remote_import_paths говорит:
Поддерживаемые системы контроля версий:
Bazaar .bzr Fossil .fossil Git .git Mercurial .hg Subversion .svn
И позже:
Например,
import "example.org/pkg/foo"
приведет к следующим запросам:
https://example.org/pkg/foo?go-get=1 (preferred)
http://example.org/pkg/foo?go-get=1 (fallback, only with -insecure)
Итак, я полагаю, что go get
никогда не смотрит в репозитории файловой системы.
Нужно исследовать исходный код go get
чтобы быть уверенным.
Я буду рад, если кто-то докажет, что я не прав в этом вопросе.
ОБНОВИТЬ
Может быть, я ошибаюсь, но я предполагаю, что все способности go get
работать с VCS можно здесь: https://github.com/golang/go/blob/master/src/cmd/go/internal/get/vcs.go
И я не вижу здесь возможности работать с локальными репозиториями git.