我有2个存储库。让他们说repo_a和repo_b。我在repo_b中导入了repo_a
当我跑去get时,它将获得repo_a master分支。 有没有办法使用go get或repo_b中的其他命令来获取develop分支?
我不想对每个特定的包(在这种情况下为repo_a)进行git pull
答案 0 :(得分:13)
无法使用纯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>