jjzjj

git - 如何在将 vendor 目录 checkin 版本控制时管理 Go 依赖项?

coder 2023-06-27 原文

上下文

我已经编写了一个 Go 库,并希望锁定和供应第三方依赖项。这样,对这些第三方依赖项的任何向后不兼容的更改都不会破坏我的库供其他用户使用。查看 Go 1.5 Vendoring Experiment 的原始提案有关 vendor 运作方式的更多背景信息。

我正在使用 Glide管理依赖关系和锁定特定版本。由于该项目是供其他人使用的库,因此我想将 vendor 文件夹 checkin 版本控制。这样,该库的用户无需安装 Glide 即可使用它。他们所要做的就是设置环境变量 GO15VENDOREXPERIMENT=1

我过去使用过 Glide,我对它非常满意。但是,我以前从未尝试过将 vendor 文件夹提交到版本控制。这就是为什么我突然遇到问题。我不认为这是 Glide 需要解决的问题,否则我会在那里提出一个问题。真的,这让我觉得这是 git 的一个问题。

问题

我使用的是 git 版本 2.5.4。当我运行 glide install 时,所有依赖项都被克隆并存储在 vendor 文件夹中。当我尝试将 vendor 文件夹添加到 git 时,它会混淆地尝试为它们创建子模块。 (我相信这与每个依赖项都是一个克隆的 repo 并且仍然有一个 .git 文件的事实有关)。这不是我想要的行为,我很惊讶 git 默认会这样做。事实上,我花了一段时间才弄清楚实际发生了什么以及为什么没有正确添加依赖项。

Git 子模块令人困惑并且破坏了很多工具。我只想将出售的项目按原样添加到版本控制中。我希望所有源代码按原样存在,这样它就不会弄乱任何其他工具,并且会按照我希望的方式工作。

问题

有没有办法在 git 中关闭这个默认行为?理想情况下,它可以基于每个项目。唯一相关的options for .gitconfig我发现似乎与在 git diff 中显示子模块或使用 git fetchpullclone.

如果没有,有没有办法在不使用子模块的情况下一次性添加 vendor 文件夹中的文件和文件夹?我希望有类似 git add --no-submodules vendor 的东西,但我找不到这样的东西。

我意识到我可以简单地删除每个依赖项中的 .git 文件,但由于多种原因,该解决方案并不理想。主要是,我或其他贡献者很容易忘记删除 .git 文件,因此无法正确 checkin 依赖项。我们必须记住在更新或添加新依赖项时执行此操作。

最佳答案

请注意,该问题的原始标题是“如何防止 git 默认使用子模块?”。我更新了标题,因为我想出的解决方案不涉及这样做。据我所知,当您添加的依赖项包含 .git 目录时,没有办法阻止 git 使用子模块。

相反,我决定让 git 将依赖项添加为子模块。子模块确实令人困惑,甚至带有自己独特的命令集。我发现这并不重要。该库的用户将永远不必直接与子模块交互,因为 go get 并且 Go vendor 实验将正常运行。此外,glide getglide install 命令也仍然有效。

总而言之,我决定坚持使用子模块,但我从不直接使用子模块命令。

您可能还对查看 version 0.14.1 of Zoom 的发行说明感兴趣,我在其中实现了此更改并提供了一些额外的上下文。滑行issue #112还提供了有关该问题的更多信息。

更新:我说得太早了。从头开始安装时,按照我的方式使用子模块(这只是使用默认的 git 行为)似乎会导致 go get 出现问题。在我弄清楚如何让它发挥作用之前,我将取消选择它作为所选答案。

关于git - 如何在将 vendor 目录 checkin 版本控制时管理 Go 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280436/

有关git - 如何在将 vendor 目录 checkin 版本控制时管理 Go 依赖项?的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  5. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  6. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  7. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  8. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  9. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  10. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

随机推荐