web-dev-qa-db-ja.com

go getでデフォルトのブランチの代わりに別のブランチを取得する方法

2つのリポジトリがあります。それらをrepo_aとrepo_bとしましょう。 repo_aをrepo_bにインポートしました

Getを実行すると、repo_a masterブランチが取得されます。 go getまたはrepo_bの別のコマンドを使用してブランチを開発する方法はありますか?

特定の各パッケージ(この場合はrepo_a)をgit pullしたくない

10
MouseWanted

Go 1.11以降では、これは Goモジュール を使用する場合に可能です。 Goモジュールの依存関係をインストールするときに、ブランチ名またはタグ名を含めることができる モジュールクエリ を指定できます。

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

安定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

バージョンはリビジョン番号(git/Bazaar/Mercurial/svnリビジョンハッシュ)またはタグの形式でパッケージを指定できます。

16
I159

gopkg.inを使用すると、githubにリダイレクトされます。

次の2つの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)

go get gopkg.in/pkg.v3go get github.com/go-pkg/pkgを意味しますが、ブランチまたはタグv3.*です。

詳細については、 こちら をご覧ください

11
zzn