git repo 中的 Git repo,由 go get 创建 - 转换为子模块

我在 git 存储库中有一个 go/golang 项目的完整 src-tree。这样我就可以轻松地将一个完整的项目及其依赖项克隆到另一台计算机上。

当使用 go get from eg, github.com 时,go 会在我的 src-tree 中克隆 github 项目。

是否有一种简单/标准的方法可以将这个内部 git repo 转换为子模块?类似的东西git submodule add <path>

还是我必须手动或自动找到内部存储库的 url 并使用 git submodule add <url> <path>

不使用这种方法的任何论据?就我所见,优点是我可以完全控制源代码的版本控制,轻松克隆包括依赖项在内的完整项目,使用 go get 更新我依赖/检索的第三方代码的简便方法。

结论 谢谢 Will C 和 VonC。我最终将供应商系统与工具 govendor 一起使用。我喜欢这个工具是因为它的透明性和简单性——它从来都不是必需的工具。此外,Go vendoring 系统满足了我的主要目标 - 轻松将我的完整项目及其依赖项克隆到不同的计算机。


青春有我
浏览 169回答 2
2回答

拉风的咖菲猫

您描述的方法似乎在维护方面引起了更多的麻烦。想象一下,每当进行更改时,必须记住做一个git submodule update,然后遇到向后兼容性问题。相反,我建议将Godep视为一种依赖工具。此外,在 Go 1.5+ 中,他们已经在试验vendor用于管理依赖项的文件夹,您可以在此处找到更多信息。从高层次来看,版本控制有一些细微差别,Godep但它允许您通过其 SHA 有效地检查特定提交。SHA 由您在GOPATH.&nbsp;这实际上还包括您提到的优势,例如拥有一个包含依赖项及其依赖项的位于中心的目录,并且能够控制您想要使用的依赖项的版本。尝试在git submodules 中管理它的麻烦要少得多。

饮歌长啸

我完全同意Will C的回答,但以防万一您仍想将您的 github 存储库作为子模块(在供应商子文件夹中)引用,这里是我为快速执行此操作而制作的脚本:它会:go get内的 github 存储库vendor/src(通过将 GOPATH 临时重置为供应商)找出所有采用进口的回购协议go get(这意味着你的GitHub库和它的依赖),使用go list -f在供应商子文件夹中将这些存储库添加为主存储库的子模块清理(rm)vendor/src文件夹,该文件夹只是为了获取存储库。见vendor.bat。用法:cd /path/to/your/repovendor github.com/jroimartin/gocui这将创建:&nbsp;/path/to/your/repo/vendor/github.com/jroimartin/gocui&nbsp;/path/to/your/repo/vendor/github.com/<other/dependent/repos>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go