我在一个git存储库中有一个go / golang项目的完整src树。这样,我就可以轻松地将一个完整的项目及其依赖项克隆到另一台计算机上。
当使用go get时,例如,github.com,go在我的src-树中克隆github项目。
是否有一种简单/标准的方法将这个内部git转换为子模块?类似于git submodule add <path>的东西
还是必须手动或自动找到内部存储库的url并使用git submodule add <url> <path>?
有理由不使用这种方法吗?据我所见,它的优点是我完全控制了源代码的版本控制,轻松地克隆了包括依赖项在内的完整项目,使用go get更新了我所依赖/检索的第三方代码。
结论:,谢谢你,C和VonC。最后,我使用了工具govendor的供应商系统。我喜欢这个工具,因为它的透明性和简单性--它从来不是必需的工具。此外,围棋监控系统满足了我的主要目标-使它容易克隆我的整个项目和它的依赖关系到另一台计算机。
发布于 2016-04-08 12:39:12
为了维护目的,您描述的方法似乎会引起更多的麻烦。想象一下,每当进行更改时,必须记住执行git submodule update,然后出现向后兼容性问题。
相反,我建议将戈德普看作一个依赖工具。此外,在Go 1.5+中,他们已经在尝试使用vendor文件夹来管理依赖关系,您可以找到更多关于这里的信息。
从高级别来看,在Godep版本控制方面存在一些细微差别,但它允许您通过其SHA有效地签出特定的提交。SHA是由位于GOPATH中的实际依赖项中的提交决定的。这实际上还包括您提到的优点,例如有一个具有依赖项及其依赖项的中心位置目录,并且能够控制您想要使用的依赖项的版本。尝试在git submodule中管理它,它带来的麻烦要少得多。
发布于 2016-04-08 12:52:04
我完全同意威尔C的回答,但为了防止您仍然希望将github作为子模块(在供应商子文件夹中)引用,下面是我编写的一个脚本,用于快速完成此操作:
它将:
go get在vendor/src中的github回购(通过将GOPATH暂时重置为供应商)go get导入的所有repos (意思是github及其依赖项),go list -fvendor/src文件夹,它只是为了获取repos。用法:
cd /path/to/your/repo
vendor github.com/jroimartin/gocui这将产生:
/path/to/your/repo/vendor/github.com/jroimartin/gocui
/path/to/your/repo/vendor/github.com/<other/dependent/repos>https://stackoverflow.com/questions/36499180
复制相似问题