如何使用go get获取另一个分支而不是默认分支

Mou*_*ted 11 git github go

我有2个存储库.让他们说repo_a和repo_b.我在repo_b中导入了repo_a

当我跑去get时,它将获得repo_a master分支.是否有任何方法可以使用go get或repo_b中的其他命令来获取开发分支?

我不想git pull每个特定的包(在这种情况下repo_a)

hel*_*ert 17

从Go 1.11开始,使用Go modules可以做到这一点。在为Go模块安装依赖项时,您可以指定一个模块查询,其中可能包含分支或标记名称:

$ go get <path-to-repo>@<branch>
Run Code Online (Sandbox Code Playgroud)

  • 使用 go 1.13,您在尝试获取分支时可能会遇到错误,错误以“无效版本:未知修订版 XXX”结尾。您可以通过使用提交哈希而不是分支名称来解决此问题。 (13认同)
  • [仅当您的分支名称包含斜杠](https://github.com/golang/go/issues/32955),那么您将在 Go 1.13 上收到错误。解决方法是使用提交 SHA1 而不是分支名称。 (6认同)
  • 如果提交位于主分支之外,则 &lt;path-to-repo&gt;@&lt;commit&gt; 在 gerrit 中不起作用。 (2认同)

I15*_*159 16

稳定的HEAD理念

纯粹是不可能的go get.

Go采用任何包管理器最简单实用的方法.没有多个版本的Go包这样的东西.

但这并不像第一种观点那样糟糕,因为这种行为背后存在一种哲学.

作为包装作者,您必须遵守稳定的HEAD理念.您的默认分支必须始终是包的稳定版本.您必须在功能分支中工作,并且只有在准备发布时才合并.

这种方法受到go get限制,它应该被视为Python缩进 - 它是一种由语言设计强迫的哲学.

发展方式

如果你想分叉或尝试新功能,你可以克隆回购然后切换到所需的分支,然后做go build.这种方式不应该去生产.

git clone <repo name>
cd <repo name>
git checkout <branch name>
go build
Run Code Online (Sandbox Code Playgroud)

您也可以使用第三方软件包管理工具.但是大多数都支持标签和修订,而不支持分支(因为暗示您不需要安装功能分支).

gpm:

您可以使用格式指定包,其中version可以是修订号(git/bazaar/mercurial/svn修订版哈希)或标记.


zzn*_*zzn 11

你可以使用gopkg.in它,它将重定向到github.

支持两种URL模式:

gopkg.in/pkg.v3      ? github.com/go-pkg/pkg (branch/tag v3, v3.N, or v3.N.M)
gopkg.in/user/pkg.v3 ? github.com/user/pkg   (branch/tag v3, v3.N, or v3.N.M)
Run Code Online (Sandbox Code Playgroud)

go get gopkg.in/pkg.v3意思是go get github.com/go-pkg/pkg,但是是分支或标签v3.*.

有关详细信息,请参阅此处