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

当使用例如来自github.com的go get时,go会将github项目克隆到我的src-tree中。

有没有简单/标准的方法可以将此内部git repo转换为子模块?类似于git submodule add <path>吗?

还是我必须手动或自动找到内部存储库的URL并使用git submodule add <url> <path>
是否有不使用这种方法的论点?据我所知,优点是我可以完全控制源代码的版本控制,轻松克隆包括依赖项的完整项目,轻松地更新我依赖/使用go get检索的第三方代码的方法。

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

最佳答案

您所描述的方法似乎会引起更多维护方面的麻烦。想象一下,每当进行更改时必须记住要做一个git submodule update,然后出现向后兼容性问题。

相反,我建议您看一下Godep作为依赖工具。此外,在Go 1.5+中,他们已经在尝试使用vendor文件夹来管理依赖项,您可以在其中找到有关here的更多信息。

从较高的层次来看,Godep的版本控制有些细微差别,但是它允许您通过其SHA有效地 check out 特定的提交。 SHA由您在GOPATH中实际依赖项中的提交决定。这实际上还包括您提到的优点,例如具有一个位于中心位置的目录及其相关性和相关性,并具有控制要使用的相关性版本的能力。尝试用git submodule进行管理的麻烦要少得多。

09-04 05:04