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


89

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

しかし、これはマスターブランチをプルするので、v0.8.8タグが必要です。

私はやろうとしました: go get github.com/influxdb/influxdb/releases/tag/v0.8.8しかし、これは見つけることができないと言って失敗します。

私はまた、定期的に実行しようとしましたgo getマスターブランチのを、その後、手動で使用してタグチェックアウトするgitにはGOPATH/src/github...corretバージョンを設定するために。

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

TL; DRgo get特定のgithubタグで実行し、正しい依存関係をプルします。


これを試してください..gittag -a v0.8.8- "あなたのコメント"
Ashok Londhe 2015年

2
@AshokLondhe彼は、タグgo getを作成する方法ではなく、のタグを使用する方法を尋ねています。
wonderb0lt 2015年

@ wonderb0ltこれはタグを追加するコマンドです。
Ashok Londhe 2015年

特定のタグもチェックする方法を見つけようとしたのですが、前回試したのは不可能でした...
wonderb0lt 2015年

1
見ていこれを。終わり近くに、スライドはいくつかの依存関係管理の選択肢を提供します。
wonderb0lt 2015年

回答:


35

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

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

続きを読む:

Go1.6でのベンドリング

Vendoringはgo1.6で実験からリリースされ(この投稿が最初に書かれた後)、サードパーティのツールを使用して特定のタグ/パッケージのバージョンを使用するプロセスが簡単になりました。go get特定のタグまたはバージョンをフェッチする機能はまだありません。

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

Go1.11のモジュール

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


1
グーグルの部分についてもう少し詳しく説明していただけますか?goコミュニティのメーリングリストでこれについて大きな議論がありますが、そこで議論されていない他の方向性はありますか?
not_a_Golfer 2015年

1
@Not_a_Golfer Goチームの一員ではなかった男でしたが、彼らは現在社内でベンダーを使用しており、かなりかさばっていると話しました。それで彼らは公式のツールでそれをより良く解決することに興味を持っていました。それは非公式の声明だったと思いますが、それはより明確になります。
ロビンアンダーソン2015年

2
AFAIK、唯一の提案は、公式のベンダー/依存関係ファイル形式です。これは、プロジェクトが依存関係ツールに結び付けられず、必要なソリューションと相互運用できるという点で、依然として優れています(つまり、私はリビジョンロックを好み、他の人はベンダーを好みます)。
JimB 2015年

モジュールは実際にはコードコンパイラへの依存を処理しないため、go getprotoc-gen-goを修正バージョンで別の場所に使用する必要があります。したがって、2つの異なる場所で同じバージョン管理を追跡する必要があります(ライブラリはジェネレーターと緊密に結合されているため)
MartinKosicky19年

24

go mod 現在ご利用いただけます。

特定のタグのバイナリ作成する必要がある人のために、これが私の方法です:

mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/nsq@v1.1.0
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

説明:

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

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


4
外出先で1.13で、go mod init例えば、モジュールIDを必要とするgo mod init local/build
アーチー

11

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

  • タグなしでgetコマンドを実行します-マスターブランチのクローンを作成する必要があります。
  • クローンディレクトリに移動し、必要なタグまたはブランチをチェックアウトします。
  • go getコマンドを再度実行すると、チェックアウトされたブランチでコマンドが処理されます。

4
最初の実行ではgo get -d <git-url>、パッケージをダウンロードしてインストールをスキップするために使用できます。
webwurst 2017年

これは、特定のタグが必要な場合に使用する必要があります。gopkg.inは制限が厳しすぎます。
Hrishikesh Kumar 2017

4

この質問はGoモジュールよりも前のものですが、将来の参考のために、特定のバージョンをフェッチするためのGo1.11の正しい手順は次のとおりです。

go get github.com/influxdb@[version]

または、特定のgitタグを取得するには:

go get github.com/influxdb@[gitref]


1

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

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

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.