иди получи установку с местного форка - PullRequest
0 голосов
/ 22 апреля 2019

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

1 голос
/ 22 апреля 2019

Если вы просто хотите использовать другую ветку (вашу PR-ветку), вы можете продолжить использовать исходный путь импорта.

  • Сначала возьмите оригинальную упаковку.
  • Перейдите в загруженный пакет в локальной файловой системе cd $GOPATH/pkg/<package directory>
  • Из локального кэша пакетов переключитесь на ветку, из которой вы хотите извлечь. git checkout <PR branch>
  • Сейчас go get -u <package>

Если пакет доступен локально, go get update просто извлечет последний код из ветки, в которую вы получили локальный пакет.

0 голосов
/ 22 апреля 2019

Я могу ошибаться, и, возможно, существует обходной путь

Перейти документация на 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.

0 голосов
/ 22 апреля 2019

Насколько я знаю, вы не можете сделать это с go get, но вы можете скопировать каталог в GOPATH вручную. Если вы раздвоили example.com/somepackage, скопируйте /Users/me/workspaces/go/somepackage в ~/go/src/example.com/somepackage или ./vendor/example.com/somepackage.

Это, как говорится, лучшее решение, как правило, где-то разместить раздвоенный код, а затем использовать этот путь импорта. Инструменты приличия, такие как dep и modules, поддерживают выборку разных источников для пакетов.

...