关于 Go Modules 团队开发时候私有库的问题

2019-09-16 15:38:06 +08:00
 Immortal

背景:公司有两个私有项目放在私有 git 上,这里叫 A 和 B,A 项目有引用 B 的包

有两个问题请教下大家:
1、go mod 会自动下载最新 tag 的代码,如果没有会自动引入最新的 master 提交,这样没问题。但是有 tag 的情况下只会引入 tag,没法引用最新的代码(如果 B 有改动必须打 Tag ?)
2、上面的问题可以用 replace 的方案解决,但是如果团队开发,大家的 gopath 都不一致,go mod 文件会有多份,如何解决?

谢谢大家

5482 次点击
所在节点    Go 编程语言
12 条回复
janxin
2019-09-16 15:47:48 +08:00
1. 可以指定 git commit
2. 团队开发在一个机器下面?多份怎么理解呢?
mcfog
2019-09-16 15:50:28 +08:00
1. go get REPO_URL@master
2. replace 到相对路径或者另一个 URL 都可以
Immortal
2019-09-16 15:54:09 +08:00
@janxin
1、指定 master 后也会自动更新到最后一个 tag ( tag 代码可能旧于 master,但是他还是会优先 tag )
2、不是的,是指大家各自配置的 GOPATH,或者说项目在电脑里的路径不一致,我想绝对路径会不一样。后来发现相对路径也行。。最后以相对路径解决了

谢谢
Immortal
2019-09-16 15:54:43 +08:00
@mcfog
1、会以 tag 优先的
2、相对路径是对的,另一个 url 又会出现 1 的问题,版本无法保持最新
janxin
2019-09-16 16:39:41 +08:00
@Immortal 使用 git commit checksun 不是 master,另外你 A 仓库是不是没有 go.mod
Vegetable
2019-09-16 16:40:35 +08:00
Hellert
2019-09-16 16:56:19 +08:00
go get -u github.com/xx/xxxx@master 应该就可以,运行后自动更新 go.mod ,版本号应该是 v0.0.0-date-hash 的形式。
Immortal
2019-09-16 17:04:01 +08:00
@janxin
都有 go.mod ,感觉楼下说的手动 go get 下私有仓库,指定 branch 下载,触发 go mod 自己维护会变成 v0.0.0 xxxxxx 的形式应该是可行的
Immortal
2019-09-16 17:04:25 +08:00
@Vegetable
@Hellert
是的 手动 get 下 让 go.mod 自动生成
谢谢两位
JamesMackerel
2019-09-17 00:24:23 +08:00
因为这个问题,我滚回了 govendor。
Immortal
2019-09-17 13:46:49 +08:00
@JamesMackerel 可以尝试下楼上大家说的解决方案哦
lazyfighter
2019-09-17 14:02:49 +08:00
被说蒙蔽了,go mod 不是有版本吗,大家的 gopath 不一样没啥子问题啊,go mod 将 package 缓存在本地,而且有版本,版本定义好不就行吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX