2016-04-08 180 views
1

我拥有git仓库中go/golang项目的完整src-tree。这样我就可以轻松地将完整的项目及其依赖关系克隆到不同的计算机上。git仓库里面的git仓库,通过go获得 - 转换成子仓库

使用go从例如github.com得到时,在我的src-tree中克隆github项目。

是否有一个简单/标准的方法将此内部git回购转换为子模块?与git submodule add <path>类似的东西?

还是我不得不手动或自动,找到的URL内存储库并使用git submodule add <url> <path>

任何参数不使用这种方法?据我所见,优点是我可以完全控制源代码版本,轻松克隆整个项目(包括依赖项),更简单的方法来更新我依赖/使用go获取的第三方代码。

结论 谢谢威尔C和VonC。我最终使用带有工具govendor的供应商系统。我喜欢这个工具,因为它的透明度和简单性 - 它永远不是必需的工具。此外,Go出售系统满足了我的主要目标 - 使我的完整项目及其依赖项克隆到不同的计算机变得容易。

回答

2

您所描述的方法似乎会导致更多的维护头痛。想象一下,每当做出改变,不得不记得做一个git submodule update,然后有向后兼容性问题。

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

从较高的层面来看,Godep版本中存在一些细微差别,但它允许您通过其SHA对特定提交进行有效检查。 SHA取决于您在GOPATH的实际依赖关系中提交的内容。这也有效地包含了您提到的优点,例如具有一个位于中心位置的目录与依赖关系及其依赖关系,并且能够控制要使用的依赖关系的版本。它在尝试在git submodule s中管理它的时候会少得多。

1

我完全Will Canswer同意,但以防万一,你还是要引用您的GitHub库作为子模块(在供应商子文件夹),这里是我做了一个脚本来迅速做到这一点:

它将:

  • go getvendor/src的GitHub库(通过复位暂时GOPATH到供应商)
  • 识别由go get导入的所有回购(这意味着你的GitHub库它的依赖),using go list -f
  • 添加这些回购作为主回购的子模块,在供应商的子文件夹
  • 干净(RM)的vendor/src文件夹,这只是那里得到的回购。

请参阅vendor.bat

用法:

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> 
+0

谢谢你会C和VonC。我最终使用带有工具govendor的供应商系统。我喜欢这个工具,因为它的透明度和简单性 - 它可以非常准确地自动执行我手动使用的步骤,所以它永远不是必需的工具。 此外,vendoring系统满足了我的主要目标 - 使我的完整项目及其依赖项克隆到另一台计算机变得容易。 – runec