我是一位经验丰富的Go开发人员和Git用户,但有些事情我似乎无法理解。
通常,我的团队使用.gitmodules作为包依赖项,这是一种成功的模式,因为它指向精确的提交。整个“货代问题”就这样为我们解决了。
但是,我最近创建了一个项目,并使用go get从GitHub中获取各种包,而不是使用git submodule add。我完成了这个项目,把所有的东西都提交给了我的git,但是当一个队友克隆出它时,依赖项的源代码就丢失了。
通常我会说“哦,您忘了运行git submodule update --init",但是它们当然不是子模块。所以.我可以告诉他运行go get -u什么的(对吗?)但这意味着我要听命于依赖者的主分支--进入自动监控。
这里我的真正问题是:当我go get一个包然后将它提交到我的存储库时,实际会发生什么?它没有被提交到我的源树中,也不是子模块.我不知道它到底是什么!go get和Git在这里的行为和互动的确切方式是什么?
奖金一轮:你为什么想要这种行为?在什么情况下,您想要提交另一个项目到您的回购方式,迫使新的签出,以提取最新版本的源代码?
发布于 2016-05-08 23:48:48
基本上,go get下载并安装一个项目。它首先将项目的存储库克隆到GOPATH中。所以
go get github.com/foo/bar就等于
cd $GOPATH/src/github.com/foo
git clone git@github.com:foo/bar.git这是它自己的存储库。
从go 1.5开始,“手持问题”已经以一种非常整洁和优雅的方式得到了解决,到了1.6步,它已经成为标准的方法(这只是1.5中的一个经验)。这样,您只需将(子)包(有时是单个文件)添加到项目的结构/存储库中。有几个工具可以用于实现监控,包括godep,我们现在从它转到了govendor。它有很棒的功能。其中之一是将项目中的依赖项更新为给定的状态(提交、标记等),但您仍可以使用其他项目的包。
关于奖金问题。我有点困惑,我不完全理解其中的问题,我很想回答它。
https://stackoverflow.com/questions/37105678
复制相似问题