为了账号安全,请及时绑定邮箱和手机立即绑定

Go Get、Git 和依赖项

Go Get、Git 和依赖项

Go
Smart猫小萌 2022-01-10 14:30:28
我是一名经验丰富的 Go 开发人员和 Git 用户,但有些事情我似乎无法理解。通常我的团队使用.gitmodules包依赖项,这是一个成功的模式,因为它指向一个精确的提交。整个“卖货问题”就这样为我们解决了。但是,我最近创建了一个项目,用于go get从 GitHub 获取各种包,而不是使用git submodule add. 我完成了项目,将所有内容提交到我的 git repo,但是当队友克隆出 repo 时,依赖项的源代码丢失了。通常我会说“哦,你忘了运行git submodule update --init”,但它们当然不是子模块。所以...我可以告诉他运行go get -u或其他什么(对吗?),但这意味着我受依赖的主分支的摆布——进入供应商。我真正的问题是:当我一个包然后将它提交到我的存储库时实际发生了什么go get?它没有提交到我的源代码树中,也不是子模块......我不知道它到底是什么!go get和 Git 在这里行为和交互的确切方式是什么?奖金回合:你为什么想要这种行为?在什么情况下,您希望将另一个项目提交到您的 repo 中,以强制新签出每次都提取最新版本的源代码?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

基本上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 开始,“供应商问题”已经以一种非常简洁优雅的方式解决,从 go 1.6 开始,它已成为标准方式(它只是 1.5 中的一个实验)。这样,您只需将您真正需要的(子)包(有时是单个文件)添加到项目的结构/存储库中。有一些工具可以处理供应商,包括godep我们目前切换到的govendor. 它具有非常棒的功能。其中之一是将项目中的依赖项更新为给定状态(提交、标记等),但您仍然可以拥有其他项目的包,您正在处理。
关于奖金问题......我害怕我有点困惑和害怕我不完全理解其中的问题,但我很乐意回答。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 248 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号