Mat*_* Mc 3 git go git-submodules
我是一位经验丰富的Go开发人员和Git用户,但有些东西我似乎无法理解.
通常我的团队使用.gitmodules包依赖,这是一个成功的模式,因为它指向一个确切的提交.以这种方式为我们解决了整个"售卖问题".
但是,我最近创建了一个项目,用于go get从GitHub获取各种包而不是使用git submodule add.我完成了项目,将所有内容都提交给了我的git repo,但是当一个队友克隆了repo时,依赖项的源代码丢失了.
通常我会说"哦,你忘了跑git submodule update --init",但当然它们不是子模块.所以...我可以告诉他跑步go get -u或者什么(对吗?)但这意味着我受到依赖者的主分支的支配 - 进入vendoring.
我真正的问题是:当我打包然后将其提交到我的存储库时,实际发生了什么go get?它没有被提交到我的源代码树中,它不是一个子模块......我不知道它到底是什么!go getGit在这里表现和交互的确切方式是什么?
奖金回合:你为什么要这样做?在什么情况下,您希望将另一个项目提交到您的仓库中,以便强制新的检出每次都提取最新版本的源?
基本上go get下载并安装项目.它首先将您想要的项目的存储库克隆到GOPATH中.所以
go get github.com/foo/bar
Run Code Online (Sandbox Code Playgroud)
等于
cd $GOPATH/src/github.com/foo
git clone git@github.com:foo/bar.git
Run Code Online (Sandbox Code Playgroud)
这是它自己的存储库.
从第1.5步开始,"售卖问题"已经以一种非常整洁和优雅的方式得到了解决,并且从第1.6步开始,它成为标准方式(它只是1.5中的经验).这样,您只需将您真正需要的(子)包(有时是单个文件)添加到项目的结构/存储库中.有一些工具负责处理,包括godep我们目前切换到的工具govendor.它具有非常棒的功能.其中之一是将项目中的依赖项更新为给定状态(提交,标记等),但您仍然可以使用其他项目的包,您正在处理.
关于奖金问题......我很害怕我有点困惑和害怕我完全不明白这个问题,我很乐意回答它.