gpt4 book ai didi

git - 去巴泽尔 : Using external Git repositories

转载 作者:IT王子 更新时间:2023-10-29 01:48:03 29 4
gpt4 key购买 nike

到目前为止,我一直在使用 go 工具来获取依赖项。我已将 $GOPATH 设置为 ~/projects/holygrail,并将我的代码 check out 到 src/mycodehosting.foo/myuser/holygrail

鉴于我实际上依赖于诸如 gRPC 之类的东西,这意味着我需要从 protobuf v3 的源代码构建 protoc,我编写了一个小脚本来帮助我做到这一点。我非常希望不要在检查我的源代码时必须预先准备布局,而且我非常希望不要使用 bash 脚本来获取我的依赖项,然后构建它们。

目前暂定的解决方案:

  • 使用 Git 子模块获取外部依赖项(遗憾的是,这意味着没有 go get 知道如何做的智能重定向)
  • 通过将 GO15VENDOREXPERIMENT 变量设置为 1 来使用 Go 1.5 的 vendoring
  • 切换到 Bazel 以获得一个健全的构建系统,该系统将知道如何仅在需要时构建各种依赖项

不幸的是,我有点卡住了。

  • 我正在使用 Bazel 0.1.1 和 Skylark 的 Go 规则,从 git repo 复制到 ~/.bazel/base_workspace
  • 我最初尝试在 Bazel 的 WORKSPACE 中使用 new_local_repository(后来切换为使用 new_git_repository),指定自定义 BUILD 依赖项之一的文件
    • 因为 Bazel 无法找到 Go Skylark 规则而失败了
  • 我不确定如何为 git-submodule 下载的存储库编写自定义 BUILD 文件,并将其公开到 vendor/ 文件夹中他们给巴泽尔。

我走在正确的轨道上吗?我使用子模块是否正确?我使用 vendor/ 子文件夹来存储 Go 库是否正确?

  • 使用 Bazel 构建外部依赖项的推荐方法是什么,其中代码和依赖项都是用 Go 编写的?
  • 您能否提供一个存储库示例:
    • 正确地依赖于外部BUILD-无文件 Go 存储库(实际上没有导入上游代码)?
    • 在外部存储库中正确构建 Go 代码?
    • 正确地将外部存储库中的 Go 代码集成到主 Go 项目中?

对此进行更多研究:

  • Kythe 似乎有一个 BUILD 文件用于许多依赖项(即使它们不是子模块,也没有什么区别)。
  • 该辅助规则使用 go_package() 规则。但这似乎来了from Kythe itself .
    • 开始使用 Kythe 的规则似乎不对,但这似乎是一种可行的方法?
    • 其他人做什么?

最佳答案

在几个版本之前,Bazel 支持规则名称中的斜线。连同对自定义包名称 ( https://github.com/bazelbuild/rules_go/issues/16) 的黑客支持,这似乎涵盖了我的用例。

tl;dr 我有 //vendor:BUILD 文件,其中包含 go_library(name='github.com/blah/blah', ...) 等规则。目录被命名,例如,//vendor/github.com/blah/blah。每个子包都有一个单独的规则。我手动指定了依赖项。

关于git - 去巴泽尔 : Using external Git repositories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055102/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com