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

时间:2017-03-13 10:52:51

标签: git github go

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

当我跑去get时,它将获得repo_a master分支。 有没有办法使用go get或repo_b中的其他命令来获取develop分支?

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

3 个答案:

答案 0 :(得分:13)

稳定的HEAD理念

无法使用纯go get

  

Go采用任何软件包管理器最简单实用的方法。没有多个版本的Go包。

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

  

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

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

发展方法

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

git clone <repo name>
cd <repo name>
git checkout <branch name>
go build

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

gpm

  

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

答案 1 :(得分:8)

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

支持两种网址格式:

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)

go get gopkg.in/pkg.v3表示go get github.com/go-pkg/pkg,但是分支或标记v3.*

有关详细信息,请参阅here

答案 2 :(得分:3)

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

$ go get <path-to-repo>@<branch>