前言 go mod (vendor) 是 golang 中依赖管理的一个工具,而 git 是个版本管理工具,两者结合本该是相得益彰事情,然而在某些情况下并不是如此

在某个项目中,需要更新 k8s.io/client-go 以获得更高 kubernetes 版本的支持,原本这个 k8s.io/client-go 设计向下兼容的,所以很大情况升级并不会产生很大的风险,而这就产生了下面问题的导火索

升级

升级 client-go 非常简单,只需执行一下命令 git get -u k8s.io/client-go@v0.19.0

更新vendor也只需执行 go mod vendor

执行之后似乎并没有任何错误,一切都在朝好的方向发展,本地执行构建也没有任何错误 go build # 使用 go mod 编译

go build -mod=vendor # 使用 vendor 编译

结果和预期一样,并没有任何错误,只需提交代码 git add go.mod go.sum

git commit -m "update client-go to v0.19.0"

git add vendor/

git commit -m "update vendor package to v0.19.0"

git push

等待 reviewr 审查结束即可合并到主分支。

然而并不是如此!!!!

问题

reviewr 将指定分支的代码拉取到本地后,进行构建发现,vendor 中缺少依赖 build app: cannot load github.com/googleapis/gnostic/openapiv2: open /go/src/app/vendor/github.com/googleapis/gnostic/openapiv2: no such file or directory

第一直觉是,可能有某些文件并没有提交上去,然后重新执行了一次了 go mod vendor

git add vendor/

git commit -v --amend --no-edit

git push

结果提示,并没有变化 Everything up-to-date, 从这就感觉有点匪夷所思了。通过本地查看,文件是存在的 ls vendor/github.com/googleapis/gnostic LICENSE compiler extensions openapiv2

通过 git ls-files --error-unmatch 命令也是可以查到文件是被跟踪了,这就说明 git push 的时候会上传该文件 git ls-files --error-unmatch vendor/github.com/googleapis/gnostic/openapiv2 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go

vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go

vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto

vendor/github.com/googleapis/gnostic/openapiv2/README.md

vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json

在 reviewr 上执行 ls vendor/github.com/googleapis/gnostic LICENSE OpenAPIv2 compiler extensions

发现了在 reviewr 内容竟然和我不一样,OpenAPIv2 存在大写,而我的文件下是小写 openapiv2,这就很奇怪了。在搜索引擎上搜索 git 大小写问题,知道了 git 是默认忽略大小写问题的,就是说 OpenAPIv2 和 openapiv2 对于 git 来说,是同一个,这就导致了不会更新到 git 的问题。

而执行 go mod vendor 的时候,他将会删除目录的。所以在我电脑上不存在任何问题。

修复

知道了问题原因,那就需要着手解决这个问题了。git 默认忽略大小写,是不是只要开启这个设置,就没有问题了?

查看本机 git 配置 git config --get core.ignorecase

true 表示忽略大小写

改成 false git config core.ignorecase false

再执行 git status -s, 确实存在文件未跟踪 ?? vendor/github.com/googleapis/gnostic/openapiv2/

通过以下方式提交 git add vendor/github.com/googleapis/gnostic/openapiv2/

git commit -v --amend --no-edit

git push

reviewr 再次重试,发现问题并没有解决,重复上面的检查步骤,目录里面也还是存在大写 LICENSE OpenAPIv2 compiler extensions

这就直接导致了,懵逼三连了,查找网上资料,通过 git mv 方式, 问题同样没有解决,解决只是在本地解决,任何一个人拉取下来还是一样的问题。

最后经过多次尝试,找到了一种解决方案 git rm -r -f vendor

rm -rf vendor

git commit -m "update venodr"

go mod vendor

git add vendor

git commit -v --amend --no-edit

git push

最终 reviewr 可以通过测试。

参考资料

vendor自动恢复_解决 vendor 中存在大小写变更问题相关推荐

  1. idea 模块jdk依赖总是自动变_解决IDEA中导入新的maven依赖后Language Level自动重置问题...

    问题: 弄了个测试项目,因为有涉及JDK1.8的代码,所以将IDEA中默认的Language Level 5(即对应JDK1.5),修改为了8(即对应JDK1.8),但是每次引入新的maven依赖,自 ...

  2. vendor自动恢复_push文件到system分区,重启后文件会被自动恢复

    push文件到system分区,重启后文件会被自动恢复 2020-02-4 阅读:2488 [DESCRIPTION] 客户反馈有些版本,push文件到system分区之后一旦重启,push的文件会被 ...

  3. python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...

  4. python threading timer 退出_解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...

  5. excel自动筛选_在Excel中按选择自动筛选

    excel自动筛选 In Excel 2003, you can add a couple of buttons to the toolbar to make it easy to filter a ...

  6. dependency报红_解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)...

    问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得 ...

  7. mybatis多字段排序_解决mybatis中order by排序无效问题

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  8. python导入类有红线_解决Python中导入自己写的类,被划红线,但不影响执行的问题...

    1. 错误描述 之前在学习Python的过程中,导入自己写的包文件时,与之相关的方法等都会被划红线,但并不影响代码执行,如图: 看着红线确实有点强迫症,并且在这个过程当时,当使用该文件里的方法时不会自 ...

  9. button layui 点击事件_解决layui中的form表单与button的点击事件冲突问题

    解决layui中的form表单与button的点击事件冲突问题 layui的form表单位置和button标签的位置重合,会使得button的click事件得不到响应,如图: 蓝色底为form的位置, ...

最新文章

  1. 详解Asp.net MVC DropDownLists
  2. SCCM 2016 配置管理系列(Part 12 )
  3. MHA 日常维护命令集
  4. Linux 驱动开发之内核模块开发 (三)—— 模块传参
  5. BAT网页10年巨变,背后的前端技术你都知道吗?
  6. 问题 E: 编写函数:求数组中的最小值 (Append Code)
  7. 今天拜读了X先生的作品,深受其益
  8. iptables转发基础
  9. Anaconda下载太慢
  10. 苹果手机投影到墙上_针对商业用户倾情打造,明基E582智能无线投影仪体验
  11. IT经理人:提高团队工作效率的11个方法
  12. oracle手动删除dbf文件,oracle删除DBF文件
  13. python大数据工程师招聘_大数据工程师是做什么的为什么招聘网上薪资都好高啊?...
  14. web数字可视化有哪些实现的方法?
  15. 微带线电容设计与仿真
  16. CAD -2012软件安装的讲解
  17. CSS3基础一篇完结(豪豪的备忘录)
  18. python中保留两位小数或者多位小数的方法
  19. 机器学习(上)线性回归、多项式回归、标准差、百分位数、数据分布、散点图
  20. Chrono-Chrome下载管理插件

热门文章

  1. 美博士环保聚焦“限漆令”出台之后的涂料行业
  2. Mongodb WiredTiger存储引擎特性
  3. [MOSS 译]如何:在WEB内容查询部件中使用自定义的字段
  4. WHAT THE DATA SAYS ABOUT KUBERNETES DEPLOYMENT PATTERNS
  5. Linux设备驱动Hello World程序介绍
  6. new一个新对象的时候,各属性方法的操行顺序
  7. 从Eclipse转移到IntelliJ IDEA一点心得
  8. cocos2d-x的win32编译环境
  9. iOS开发-简单工厂模式
  10. 安全×××限 爱因斯坦对安全进程的启示