首页 > 解决方案 > 如何使用本地 git checkout 进行变更跟踪

问题描述

我遇到了以下挑战:

在开发代码时,我还想并行开发一个依赖项(micromdm/scep)并使用 git 跟踪更改。

我的代码像这样导入库:

import(
    ...
    sscepclient "github.com/micromdm/scep/v2/client"
    "github.com/micromdm/scep/v2/cryptoutil/x509util"
    "github.com/micromdm/scep/v2/scep"
)

为了指向模块的本地检查版本,我在 go.mod 中替换了模块:

require (
...
github.com/micromdm/scep/v2 v2.0.0
)
replace github.com/micromdm/scep/v2 => /home/pi/go/scep

我确实对 scep 模块的存储库进行了 git clone,并且可以在 replace 指令指定的目录中找到文件。

但是当我尝试运行我的代码时,我得到一个错误

../../scep/server/csrsigner.go:8:2: no required module provides package github.com/micromdm/scep/v2/scep; to add it:
        go get github.com/micromdm/scep/v2/scep

如果我确实按照要求获取依赖项,则会收到错误消息

go get: module github.com/micromdm/scep/v2@upgrade found (v2.0.0, replaced by /home/pi/go/scep), but does not contain package github.com/micromdm/scep/v2/scep

我还尝试在依赖模块的 go.mod 本身中添加替换语句,因为该模块还有几个直接指向 scep 模块的 require 语句,但没有成功。

据我了解,GO 无法找到模块(显然),但老实说,依赖项的处理确实让我感到困惑。根据我在互联网上的发现,我了解到应该可以通过使用 replace 指令来开发本地签出的存储库。如果有人能对此有所了解,我会很高兴。谢谢!

标签: gitgodependency-management

解决方案


  1. 检查您是否定义了模块版本(v2)

    module github.com/micromdm/scep/v2@/home/pi/go/scep/go.mod

  2. 将模块的路径更改为相对路径,在这种情况下,它可以工作

更新1:我看到你做了,但我想到了唯一的选择。

更新2:找到了一个小解决方案。


推荐阅读