V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
heww
V2EX  ›  Go 编程语言

大家是怎么处理 vendor 的?

  •  
  •   heww · 2017-11-21 15:56:14 +08:00 · 3029 次点击
    这是一个创建于 2564 天前的主题,其中的信息可能已经有所发展或是发生改变。
    唉,看大家这个说 Golang 值得学,那个说 Golang 越来越火。我就想问下你们的依赖是怎么处理的?

    vendor 这个目录是放到 cvs 中了,还是 ignore 了?按照“传统” vendor 是应该被 ignore 的,但忽略了在国内运行 ci 好难受啊!
    29 条回复    2017-12-18 18:31:51 +08:00
    sunhr
        1
    sunhr  
       2017-11-21 16:02:04 +08:00
    为了 CI 的速度,目前暂时是都提交到 Git 上了
    mineyouhe
        2
    mineyouhe  
       2017-11-21 16:22:57 +08:00
    就保留 vendor.json 这个文件,其他的随时根据这个文件下载呗
    HarrisonZ
        3
    HarrisonZ  
       2017-11-21 16:26:41 +08:00
    单独开一个项目维护 vendor
    heww
        4
    heww  
    OP
       2017-11-21 16:29:03 +08:00
    @HarrisonZ 但是有好多项目(比如微服务的模块)的怎么办?维护多个 vendor 吗?
    iappled
        5
    iappled  
       2017-11-21 16:30:51 +08:00
    直接加到 Git,为了速度
    iappled
        6
    iappled  
       2017-11-21 16:31:39 +08:00
    按理说依赖不加 git 的,但是因为 qiang,我还是直接加 git 里了,反正都是代码
    vicluo96
        7
    vicluo96  
       2017-11-21 16:41:57 +08:00 via Android
    ignore vendor,用 glide 管理,提交 glide.yaml。CI 设置缓存 vendor 目录
    heww
        8
    heww  
    OP
       2017-11-21 16:49:09 +08:00
    @vicluo96 其实你会发现缓存了 vendor 目录,glide install 的时候也是会很慢的 (主要是要 clone 各 git repo 到 ~/.glide/cache 下,然后和 vendor 下的做比对)。
    sophos
        9
    sophos  
       2017-11-21 16:49:53 +08:00
    肯定是提交到 git 啊,需要更新再 update 一把就行了
    leopku
        10
    leopku  
       2017-11-21 19:31:52 +08:00
    前些天刚纠结过这个问题。最后还是选择了忽略。(一个新项目,开始就用的 glide )
    theohateonion
        11
    theohateonion  
       2017-11-21 23:08:54 +08:00
    我们前后端都是把依赖写好, vendor 在 CI/CD 上自己去下载, 然后打包, 不进代码库.
    fhc023
        12
    fhc023  
       2017-11-21 23:30:02 +08:00
    heww
        13
    heww  
    OP
       2017-11-21 23:56:11 +08:00
    @theohateonion CI/CD 自己去下载在国内 clone github 上面的 repo 很慢,有时候还会超时,链接拒绝什么的。
    heww
        14
    heww  
    OP
       2017-11-21 23:58:13 +08:00
    @fhc023 现阶段 glide 比 dep 不知高到哪里去了!
    chenqh
        15
    chenqh  
       2017-11-22 00:38:52 +08:00   ❤️ 1
    感觉 go 的包管理太恶心了
    WendellSun
        16
    WendellSun  
       2017-11-22 08:47:36 +08:00 via Android
    提交到 git 了,ci 快一些。
    SevenJ
        17
    SevenJ  
       2017-11-22 09:12:56 +08:00
    golang/dep
    theohateonion
        18
    theohateonion  
       2017-11-22 09:20:39 +08:00
    @heww 这个没法解决呀,你自己的机器如果不走 FQ 工具的话, 访问 github 也会有同样的问题呀。 解决办法是使用国内的镜像源.
    janxin
        19
    janxin  
       2017-11-22 09:39:35 +08:00
    为了 CI 都是提交的,如果没有 CI 就 ignore
    cloverstd
        20
    cloverstd  
       2017-11-22 10:27:49 +08:00
    必须存起来呀
    如果别人把 source 删了咋整
    HarrisonZ
        21
    HarrisonZ  
       2017-11-22 10:33:43 +08:00
    @heww 同一个项目共用一个 vendor,包括微服务的各个模块
    fhc023
        22
    fhc023  
       2017-11-22 10:45:09 +08:00
    @heww 是吗?没写过大项目不太了解 dep 说会以后会放到官方 toolchain 里 如果没有依赖 glide 的某些高级 feature 的话不妨就直接使用将来的趋势?
    https://github.com/Masterminds/glide#golang-dep
    https://blog.gopheracademy.com/advent-2016/saga-go-dependency-management/
    heww
        23
    heww  
    OP
       2017-11-22 10:46:35 +08:00
    @theohateonion "解决办法是使用国内的镜像源" 国内的镜像源是什么,求推荐!
    heww
        24
    heww  
    OP
       2017-11-22 10:50:07 +08:00
    theohateonion
        25
    theohateonion  
       2017-11-22 12:16:48 +08:00
    @heww 仔细看了一眼才发现问题具体到了 GO 这门语言上。 没写过 GO 也不太清楚是否有 GO 的国内的镜像源 抱歉哈
    fhc023
        26
    fhc023  
       2017-11-22 14:14:18 +08:00
    @heww 目前都没有遇到这类问题呢…
    private 的项目都在自己的 gitlab 上,连上 vpn 就可以 go get
    CI 的问题,最简单粗暴的方法是把 vendor 推进去。这样其实也无所谓用 glide 还是 dep 了
    如果不想推 vendor 的话,我会反过来想。为啥开发的时候可以 go get 但是 CI 却不行?能不能把两者环境统一一下?如果实在不行,能不能做 repo 的缓存?
    heww
        27
    heww  
    OP
       2017-11-22 19:40:05 +08:00
    @fhc023 本地有翻的梯子,CI 环境下没有,而且本地失败了可以一而再再而三的 get,CI 环境下这样就太不“优雅”了。
    saber000
        28
    saber000  
       2017-11-22 20:37:59 +08:00
    加到 git 中,删除其中 testdata *_test.go 和非代码文件,代价还能接受
    heww
        29
    heww  
    OP
       2017-12-18 18:31:51 +08:00
    我们现在是使用 dep 来管理 pkg,使用 dep prune 删除比必要的 pkg 后把 vendor 放到 git 里了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1397 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.