このモジュールを例として使用します (特定のコミットを使用して、他の人も私が見ているものを見ることができるようにします):
git clone git://github.com/walles/moar
Set-Location moar
git checkout d24acdbf
Go に「すべてを更新する」ように指示する方法が欲しいです。モジュールがすべての最新バージョンで動作すると仮定します。以下は、これを行うために私が見つけた 5 つの方法です。それぞれがクリーンなクローン上で実行されるものとします。これはgo.mod
19 行の になります。
go get -u
結果はgo.mod
14 行になります:
go get -u
go mod tidy
結果はgo.mod
13 行になります:
go mod tidy
内のすべてを手動で削除して をrequire
実行するgo mod tidy
と、12 行になります。 内のすべてを手動で削除して を実行require
するとgo get -u
、11 行になります。 私の質問は、なぜこれらのメソッドが異なる結果を生成するのか、そして私がやろうとしていることを実行する「正しい方法」は何なのかということです。
ベストアンサー1
要約:
あなたが望むのはこれです:
go get -u
go mod tidy
サブディレクトリ内のパッケージを再帰的に更新するには、次のようにします。
go get -u ./...
目にする不一致は、ソフトウェアの本質的な有機的性質によるものです。
あなたの例を使用すると、コミットはおそらくメンテナーによって実行されずにチェックインされたd24acdbf
と考えられます (19 行が長くなっている理由を説明しています)。メンテナーが実行していた場合は、最後に表示される 13 行のバージョンが表示されます。git://github.com/walles/moar
go mod tidy
go get -u
単独では、依存関係の取り込みがより積極的です。また、依存関係を最新の (互換性のある) バージョンに更新するという単なる事実によって、新しい直接的または間接的な依存関係が取り込まれる可能性があります。これを明日試した場合、これらの依存関係はさらに大きくなる可能性があります (一部のサブ依存関係の最新バージョンでは新しい機能が追加されているため、新しい依存関係が必要になります)。そのため、リポジトリのメンテナーが特定の (最新ではない) バージョンで修正するのには正当な理由がある可能性があります。
行くモッド整頓この積極的な依存関係分析をクリーンアップします。
go mod tidy
PS:追跡後に依存関係が縮小するという誤解がよくありますがgo.sum
、場合によってはこのファイルはtidy
(この場合はそうではありませんが)後に大きくなります。