Иди получи установку с местного форка

Я пытаюсь установить пакет 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.

Другие вопросы по тегам