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

6
我使用版本控制系统git来管理我的软件。在源代码内部,我使用go get从github自动获取软件。如何处理“双重git”情况?
当我在src/github.com/somename/someproject目录上运行git add时,它本身就是一个git仓库,这会添加任何内容吗?(当我运行git status时似乎看不到)
我应该使用git submodule来处理由git get所添加的子目录吗?
在这种情况下,最佳实践是什么?
编辑:我为我的软件项目设置了自定义的$GOPATH环境。这就是为什么src/github.com/somename/someproject目录位于我的软件目录层次结构中的原因。

越想越觉得应该删除所提到的 github.com/somename/someproject 子目录中的 .git 目录。这样我只需冻结代码并将其推送到我的主存储库中。虽然不太美观,但我想那也能正常工作。 - topskip
2
看起来 goven(https://github.com/kr/goven)可以做到这一点。 - topskip
2个回答

3
尽管 @nemo 的回答可能是正确的,但这是我所做的:从 go get 下载的仓库中剥离 .git 和 .gitignore 文件。我的源代码路径位于源目录中:GOPATH=.../myproject/src/go/。这样所有的 go get 下载都在我的项目树中,我可以用 git 来处理它们。
我认为这就是 "goven"(请参见我的问题评论)应该做的事情,但我无法让它正常工作。

2
如果您想存储所使用的外部包的修订版本,最好是go import远程语法支持类似于github.com/user/project/sub/directory/revision的内容,但不幸的是它目前不支持。关于这个问题,在golang-nuts邮件列表上有一个讨论,请查看可能的解决方案和注意事项。
最简单的方法可能是fork您所使用的项目并导入您的forks,这样您就可以完全控制更新了。像github这样的平台使这易如反掌。
go help remote中可以得知:
新下载的包将写入GOPATH环境变量中列出的第一个目录(请参阅"go help gopath")。
因此,您提出的子模块解决方案是可行的,但使用起来不太容易,因为您必须在获取时指定自定义GOPATH。我建议您fork库并引用该fork。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接