如何忽略 go.mod 中的替换指令
How to ignore replace directive in go.mod
我在进行本地开发时使用“替换”语句。所以我的 go.mod 看起来像这样:
require (
gorm.io/gorm v1.21.11
github.com/mypackages/session v1.1.0
)
replace (
github.com/mypackages/session => ./../session
)
但是当我 git commit
我的更改并将代码部署到生产环境时,我不需要“替换”,所以我需要在每个 git commit
上注释这行替换代码然后取消注释.有没有办法在生产环境中忽略“replace”语句?
replace
在 环境 中不能被忽略,因为它是在依赖解析时使用的,它在构建之前就已经存在了,这比它被执行早了很长时间在生产中。但要回答根本问题,不,您不能“忽略”该指令。如果它在那里,它就在那里。
虽然@Adrian 是正确的,因为在 Go 中无法实现这一点,但我认为这个问题与 Go 无关,而更多地与 Git 有关。您可以使用内容过滤器忽略文件的特定部分。有关详细信息,请参阅 this SO answer。
拥有 mod 文件的本地版本(例如 go.local.mod),然后您可以告诉 go 命令使用它:
go build -modfile=go.local.mod main.go
我在进行本地开发时使用“替换”语句。所以我的 go.mod 看起来像这样:
require (
gorm.io/gorm v1.21.11
github.com/mypackages/session v1.1.0
)
replace (
github.com/mypackages/session => ./../session
)
但是当我 git commit
我的更改并将代码部署到生产环境时,我不需要“替换”,所以我需要在每个 git commit
上注释这行替换代码然后取消注释.有没有办法在生产环境中忽略“replace”语句?
replace
在 环境 中不能被忽略,因为它是在依赖解析时使用的,它在构建之前就已经存在了,这比它被执行早了很长时间在生产中。但要回答根本问题,不,您不能“忽略”该指令。如果它在那里,它就在那里。
虽然@Adrian 是正确的,因为在 Go 中无法实现这一点,但我认为这个问题与 Go 无关,而更多地与 Git 有关。您可以使用内容过滤器忽略文件的特定部分。有关详细信息,请参阅 this SO answer。
拥有 mod 文件的本地版本(例如 go.local.mod),然后您可以告诉 go 命令使用它:
go build -modfile=go.local.mod main.go