[英]Go Get, Git and Dependencies
我是一位经验丰富的Go开发人员和Git用户,但是有些事情似乎无法解决。
通常,我的团队将.gitmodules
用于程序包依赖关系,这是一个成功的模式,因为它指向确切的提交。 这样就为我们解决了整个“供应商问题”。
但是,我最近创建了一个项目,并使用go get
从GitHub提取了各种软件包,而不是使用git submodule add
。 我完成了项目,将所有内容都提交给git repo,但是当队友克隆出repo时,缺少了依赖项的源代码。
通常我会说“哦,您忘记了运行git submodule update --init
”,但是它们当然不是子模块。 所以...我可以告诉他go get -u
或其他东西(对吗?),但这意味着我受依赖项的master分支的支配-输入供应商。
我在这里真正的问题是:当我到底发生了什么go get
包,然后将其提交到我的仓库? 它没有提交到我的源代码树中,也不是子模块...我无法分辨它到底是什么! go get
和Git在这里表现和交互的确切方法是什么?
奖励回合:您为什么要这种行为? 在什么情况下,您想以强制新签出每次拉取源的最新版本的方式将另一个项目提交到您的仓库中?
基本上go get
下载并安装一个项目。 首先将所需项目的存储库克隆到GOPATH中。 所以
go get github.com/foo/bar
等于
cd $GOPATH/src/github.com/foo
git clone git@github.com:foo/bar.git
这是它自己的存储库。
从1.5版开始,“供应商问题”已经以一种非常简洁的方式解决了,从1.6版开始,它已成为标准方式(在1.5版中只是一种实验)。 这样,您只需将真正需要的(子)包(有时是单个文件)添加到项目的结构/存储库中。 那里有一些用于管理供应商的工具,包括godep
,目前我们govendor
切换到govendor
。 它具有很棒的功能。 其中之一是将项目中的依赖项更新为给定状态(提交,标记等),但是您仍可以使用正在处理的其他项目的程序包。
关于奖金问题...我很困惑,我有点困惑,我无法完全理解其中的问题,不过我很想回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.