1

コンパイル エラーが発生したため、ベンダー フォルダーに間違ったバージョンのライブラリがあると思われました。最初のタスクは、ライブラリのどのリビジョンが正しいかを判断することでした。文字列「VolumeCreateRequest」を含むライブラリ ソースのバージョンを見つける必要がありました。そのために、ライブラリのルート フォルダーから次のトリックを使用しました。

git rev-list --all | xargs git grep VolumeCreateRequest

そこから、バージョン ハッシュを見つけました: 06f160237426e705ed214a4f087d4aeea32c0a8b:

それで、そのバージョンをベンダーフォルダーに追加しようとしました go vendor add github.com/docker/docker/...@06f160237426e705ed214a4f087d4aeea32c0a8b

しかし、うまくいきません。git を使用してライブラリのバージョンを確認すると、取得したばかりのバージョンが報告されません。

git log -n 1 --pretty=format:"%H"

vendor.json ファイルにも間違ったバージョンが含まれています

元気?ドキュメントを注意深く読んだ後、go vendor add@06f160237426e705ed214a4f087d4aeea32c0a8bがフェッチ URI の最後にある を黙って無視していることがわかります。

正しいコマンドは、@version をサポートするgo vendor fetchです。

govendor fetch github.com/docker/docker/...@06f160237426e705ed214a4f087d4aeea32c0a8b

これを達成する別の方法は、必要なバージョンのライブラリを GOPATH で (つまり、vendor フォルダーではなく) git checkout してgovendor addから、GOPATH からパッケージをチェックアウトすることです。

だから今、私はgitのバージョンをチェックし、私たちはすべてうまくいっています. そして、次の問題が発生しました。私たちの generate.go ファイル (によって呼び出されます) が入り、私の GOPATH にあったものでgo generate目的のバージョンを上書きします。vendor.json

私たちのシーケンスgenerate.goは次のとおりです。

//go:generate govendor add +external
//go:generate govendor fetch +missing
//go:generate go vendor sync

追加によって私の変更が上書きされ、vendor.json が既に間違ったバージョンに感染しているため、同期が無効になるため、これは間違っていることが判明しました。

正しいシーケンスは次のとおりです。

//go:generate govendor sync
//go:generate govendor add +external
//go:generate govendor fetch +missing

このようにして、カスタマイズされた vendor.json はまず vendor フォルダーを必要なものに同期し、その後でのみ、外部の不足している依存関係がダウンロードされます。

最後に、いくつかの依存関係は、実際にはまったくコンパイルされず、プラットフォーム固有のものになります。これを解決するために、これらの行を generate.go に追加して、同期、追加、フェッチした後、壊れた依存関係を削除します

//go:generate govendor remove github.com/docker/docker/runconfig
//go:generate govendor remove github.com/docker/docker/libcontainerd
//go:generate govendor remove github.com/docker/libcompose/test
//go:generate govendor remove github.com/Microsoft/...
4

0 に答える 0