Go Get,Git 和依赖项
Go Get, Git and Dependencies
我是一名经验丰富的 Go 开发人员和 Git 用户,但有些事情我似乎无法理解。
通常我的团队使用 .gitmodules
作为包依赖项,这是一个成功的模式,因为它指向一个精确的提交。整个"vendoring problem"就这样给我们解决了
不过,我最近创建了一个项目并使用 go get
从 GitHub 获取各种包,而不是使用 git submodule add
。我完成了项目,将所有内容提交到我的 git 存储库,但是当队友克隆出存储库时,依赖项的源代码丢失了。
通常我会说"oh, you forgot to run git submodule update --init
",但当然它们不是子模块。所以...我可以告诉他 运行 go get -u
或其他东西(对吗?),但这意味着我受依赖项主分支的支配——输入 vendoring。
我真正的问题是:当我 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
这是一个独立的存储库。
从 go 1.5 开始,"vendoring problem" 已经以一种非常简洁优雅的方式解决,从 go 1.6 开始,它已成为标准方式(这只是 1.5 中的一个实验)。这样,您只需将真正需要的(子)包(有时是单个文件)添加到项目的结构/存储库中。有一些工具可以处理销售,包括 godep
, from which we currently switched to govendor
。它具有非常棒的功能。其中之一是将项目中的依赖项更新为给定状态(提交、标记等),但您仍然可以拥有其他项目的包,您正在处理。
关于bonus的问题。。。我有点糊涂了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我是一名经验丰富的 Go 开发人员和 Git 用户,但有些事情我似乎无法理解。
通常我的团队使用 .gitmodules
作为包依赖项,这是一个成功的模式,因为它指向一个精确的提交。整个"vendoring problem"就这样给我们解决了
不过,我最近创建了一个项目并使用 go get
从 GitHub 获取各种包,而不是使用 git submodule add
。我完成了项目,将所有内容提交到我的 git 存储库,但是当队友克隆出存储库时,依赖项的源代码丢失了。
通常我会说"oh, you forgot to run git submodule update --init
",但当然它们不是子模块。所以...我可以告诉他 运行 go get -u
或其他东西(对吗?),但这意味着我受依赖项主分支的支配——输入 vendoring。
我真正的问题是:当我 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
这是一个独立的存储库。
从 go 1.5 开始,"vendoring problem" 已经以一种非常简洁优雅的方式解决,从 go 1.6 开始,它已成为标准方式(这只是 1.5 中的一个实验)。这样,您只需将真正需要的(子)包(有时是单个文件)添加到项目的结构/存储库中。有一些工具可以处理销售,包括 godep
, from which we currently switched to govendor
。它具有非常棒的功能。其中之一是将项目中的依赖项更新为给定状态(提交、标记等),但您仍然可以拥有其他项目的包,您正在处理。
关于bonus的问题。。。我有点糊涂了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。