git + go - 如何使用go get处理子项目

时间:2013-02-04 12:51:09

标签: git go git-submodules

我使用版本控制系统git作为我的软件。在源代码“内”,我使用go get自动从github获取软件。我该如何处理“双重git”情况?

当我在目录git add上运行src/github.com/somename/someproject时,这本身就是一个git存储库,这会添加什么吗? (当我运行git status

时,它看起来不像这样

我应该将git submodule用于git get个已添加的子目录吗?

在这种情况下,最佳做法是什么?


编辑:我的软件项目有一个自定义$GOPATH环境。这就是我的软件目录层次结构中找到src/github.com/somename/someproject目录的原因。

2 个答案:

答案 0 :(得分:3)

虽然@ nemo的答案可能就是这样,但这就是我所做的:我从.git下载的存储库中删除了.gitignorego get个文件。我的源路径位于源目录中:GOPATH=.../myproject/src/go/。这样所有go get下载都在我的项目树中,我可以用git处理它。

我认为这就是“goven”(参见我对我的问题的评论)本应该做的,但我无法让它发挥作用。

答案 1 :(得分:2)

如果你想存储你使用的外国包的修订版,那么最好是 go import远程语法会支持像github.com/user/project/sub/directory/revision这样的东西,不幸的是它。 golang-nuts邮件列表中有关于这个主题的discussion,请查看可能的解决方案和警告。

执行此操作的最简单方法可能是分叉您使用的项目并导入您的分支,这样您就可以完全控制更新。像github这样的平台让它变得非常容易。

来自go help remote

  

新下载的包将写入第一个目录   列在GOPATH环境变量中(参见'go help gopath')。

因此您提出的子模块解决方案是可行的,但不易使用,因为您必须在获取时指定自定义GOPATH。我建议分叉库并引用fork。