gpt4 book ai didi

git - Go Get、Git 和依赖项

转载 作者:IT王子 更新时间:2023-10-29 01:26:55 29 4
gpt4 key购买 nike

我是一名经验丰富的 Go 开发人员和 Git 用户,但有些事情我似乎无法全神贯注。

通常我的团队使用 .gitmodules 作为包依赖,这是一个成功的模式,因为它指向一个精确的提交。整个“供应问题”就这样为我们解决了。

但是,我最近创建了一个项目并使用 go get 从 GitHub 获取各种包,而不是使用 git submodule add。我完成了项目,将所有内容提交到我的 git 存储库,但是当队友克隆出存储库时,依赖项的源代码丢失了。

通常我会说“哦,你忘了运行 git submodule update --init”,但它们当然不是子模块。所以...我可以告诉他运行 go get -u 或其他东西(对吗?),但这意味着我受依赖项的 master 分支的支配——输入 vendoring。

我真正的问题是:当我去获取一个包然后将它提交到我的存储库时,实际上发生了什么?它没有提交到我的源代码树中,也不是子模块……我不知道它到底是什么! go get 和 Git 在这里的行为和交互的精确方式是什么?

奖励回合:您为什么想要这种行为?在什么情况下,您希望将另一个项目提交到您的存储库中,以强制新 checkout 每次都提取最新版本的源代码?

最佳答案

基本上 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 .它具有非常棒的功能。其中之一是将项目中的依赖项更新为给定状态(提交、标记等),但您仍然可以拥有其他项目的包,您正在处理。
关于奖金问题......我恐怕我有点困惑并且我不完全理解其中的问题,但我很乐意回答它。

关于git - Go Get、Git 和依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105678/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com