web-dev-qa-db-ja.com

githubリポジトリの特定のタグで「go get」を実行する方法

go get github.com/influxdb/influxdbを使用してInfluxDBデータベース(バージョンv0.8.8)をコンパイルしようとしています

しかし、これによりmasterブランチがプルされ、v0.8.8タグが必要になります。

私はやろうとしました:go get github.com/influxdb/influxdb/releases/tag/v0.8.8が見つかりませんと言って失敗します。

また、マスターブランチの通常のgo getを実行してから、GOPATH/src/github...gitを使用してタグを手動でチェックアウトして、正しいバージョンを設定しようとしました。

最後のアプローチを使用する問題は、go get -u -f ./...を使用して依存関係をプルしようとすると、masterブランチでそれらを見つけようとし、それらの一部がmasterブランチに存在しないということです...

TL; DR:特定のgithubタグでgo getを実行し、正しい依存関係を取得します。

61
ESala

go getツールを使用することはできません。代わりに、サードパーティのGoパッケージ管理ツールを使用するか、よりきめ細かく管理したいパッケージ用に独自のフォークを作成する必要があります。

Googleで働いている人に話を聞いたところ、彼はこの問題/要件を認め、彼のチームが使用したベンダー化はかさばり、おそらくすぐに公式ツールで解決するだろうと言った。

続きを読む:

Go 1.6でのヴェンドリング

ベンダーは go 1.6のExperimentalからリリースされました (この投稿が最初に書かれた後)=サードパーティツールを使用して特定のタグ/バージョンのパッケージを使用するプロセスを容易にします。 go getには、特定のタグまたはバージョンを取得する機能がまだありません。

ベンダーの仕組みの詳細: ベンダーフォルダーの理解と使用

Go 1.11のモジュール

Go 1.11は、依存性管理を改善するためにモジュールと呼ばれる実験的な機能をリリースしました。Go1.12で安定したものとしてリリースしたいと考えています。 Go 1.11のモジュールに関する情報

33
Robin Andersson

私はこれで成功しました:

  • タグなしでgetコマンドを実行します-masterブランチを複製します。
  • クローンディレクトリに移動し、必要なタグまたはブランチをチェックアウトします。
  • Go getコマンドを再度実行すると、チェックアウトされたブランチでコマンドが処理されます。
10
Gregory Russell

go modは現在入手可能です。

特定のタグのバイナリをビルドする必要がある人のために、ここに私の方法を示します。

mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/[email protected]
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

説明:

  • 上記のコードはNSQ v1.1.0をプルし、nsqdをビルドします。
  • go mod init .は、現在のディレクトリにgo.modファイルを作成します。これにより、リビジョン/タグでgo getを使用できるようになります。 ( このリンク を参照)
  • -dは「ダウンロードのみ」を意味します。直接インストールする場合は、このフラグとこの行の下のビルドコマンドを省略してください。
  • -vは「冗長であること」を意味します。
  • 上記のコードはWindows用です。 Linuxを使用している場合は、bin/nsqd.exebin/nsqdに置き換えます。

ダウンロードしたモジュールは、%GOPATH%\pkg\modに保存されます。 GOPATHディレクトリを汚染したくない場合は、新しいディレクトリを作成し、GOPATHに設定してください。

5
brk

少なくともgitリポジトリについては、この問題に対処するための(ややハッキングですが、動作している)アプローチがあります:go get'edパッケージは通常のソース管理リポジトリであるため、通常のgitツールを使用してタグをチェックアウトできます(コマンドラインからgitを使用できます) 、私はAtlassian SourceTreeを使用しています)。

パッケージ構成をチームメイトと共有するために、GOリポジトリーからgitリポジトリーを作成しました。次に、すべてのパッケージ(少なくともこの方法で管理したかったパッケージ)をgitサブモジュールとしてこのリポジトリに追加しました。このため、gitを混乱させないために、既存のレポジトリフォルダーを邪魔にならない場所に移動し、gitサブモジュールとして再度追加する必要があります。このプロセスは多少面倒ですが、面倒な価値があることが判明しました。

新しいgoパッケージを使用するたびにGOPATH-repoにコミットしてプッシュできます。私のチームメイトがこのレポジトリからプルしてgitサブモジュールの更新を発行すると(または単にSoureTreeを介して更新するため、自動的に更新されます)、パッケージのバージョンは私のタグと同じタグでチェックアウトされます。

もちろん、これはgitソース管理下のパッケージでのみ機能します...

1
Peter Hommel

maven golangプラグイン は、GET中にブランチ、タグ、およびリビジョンを再生できます。テストを見ることができます GITリポジトリーを使用する場合

0
Igor Maznitsa