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
を実行し、正しい依存関係を取得します。
go get
ツールを使用することはできません。代わりに、サードパーティのGoパッケージ管理ツールを使用するか、よりきめ細かく管理したいパッケージ用に独自のフォークを作成する必要があります。
Googleで働いている人に話を聞いたところ、彼はこの問題/要件を認め、彼のチームが使用したベンダー化はかさばり、おそらくすぐに公式ツールで解決するだろうと言った。
続きを読む:
Go 1.6でのヴェンドリング
ベンダーは go 1.6のExperimentalからリリースされました (この投稿が最初に書かれた後)=サードパーティツールを使用して特定のタグ/バージョンのパッケージを使用するプロセスを容易にします。 go get
には、特定のタグまたはバージョンを取得する機能がまだありません。
ベンダーの仕組みの詳細: ベンダーフォルダーの理解と使用
Go 1.11のモジュール
Go 1.11は、依存性管理を改善するためにモジュールと呼ばれる実験的な機能をリリースしました。Go1.12で安定したものとしてリリースしたいと考えています。 Go 1.11のモジュールに関する情報
私はこれで成功しました:
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
説明:
nsqd
をビルドします。go mod init .
は、現在のディレクトリにgo.mod
ファイルを作成します。これにより、リビジョン/タグでgo get
を使用できるようになります。 ( このリンク を参照)-d
は「ダウンロードのみ」を意味します。直接インストールする場合は、このフラグとこの行の下のビルドコマンドを省略してください。-v
は「冗長であること」を意味します。bin/nsqd.exe
をbin/nsqd
に置き換えます。ダウンロードしたモジュールは、%GOPATH%\pkg\mod
に保存されます。 GOPATH
ディレクトリを汚染したくない場合は、新しいディレクトリを作成し、GOPATH
に設定してください。
少なくともgitリポジトリについては、この問題に対処するための(ややハッキングですが、動作している)アプローチがあります:go get'edパッケージは通常のソース管理リポジトリであるため、通常のgitツールを使用してタグをチェックアウトできます(コマンドラインからgitを使用できます) 、私はAtlassian SourceTreeを使用しています)。
パッケージ構成をチームメイトと共有するために、GOリポジトリーからgitリポジトリーを作成しました。次に、すべてのパッケージ(少なくともこの方法で管理したかったパッケージ)をgitサブモジュールとしてこのリポジトリに追加しました。このため、gitを混乱させないために、既存のレポジトリフォルダーを邪魔にならない場所に移動し、gitサブモジュールとして再度追加する必要があります。このプロセスは多少面倒ですが、面倒な価値があることが判明しました。
新しいgoパッケージを使用するたびにGOPATH-repoにコミットしてプッシュできます。私のチームメイトがこのレポジトリからプルしてgitサブモジュールの更新を発行すると(または単にSoureTreeを介して更新するため、自動的に更新されます)、パッケージのバージョンは私のタグと同じタグでチェックアウトされます。
もちろん、これはgitソース管理下のパッケージでのみ機能します...
maven golangプラグイン は、GET中にブランチ、タグ、およびリビジョンを再生できます。テストを見ることができます GITリポジトリーを使用する場合