cmd/go:支持plan9上的git9的git子命令调用

zengzsys  于 4个月前  发布在  Go
关注(0)|答案(8)|浏览(71)

Go版本
go1.23.0 plan9/amd64

在你的模块/工作区中的go env输出:

GO111MODULE=''
GOARCH='amd64'
GOBIN='/usr/glenda/bin'
GOCACHE='/usr/glenda/.config/go/cache'
GOENV='/usr/glenda/lib/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='plan9'
GOINSECURE=''
GOMODCACHE='/usr/glenda/.config/go/cache/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='plan9'
GOPATH='/usr/glenda/.config/go/cache'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/sys/lib/go/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/sys/lib/go/go/pkg/tool/plan9_amd64'
GOVCS=''
GOVERSION='go1.23.0'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/usr/glenda/lib/go/telemetry'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='0'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1052339782=/tmp/go-build -gno-record-gcc-switches'

你做了什么?

go install github.com/peajack/truefetch@main ,但任何 install 命令都可以。实际上,任何依赖于调用 git 的命令都可以。

你看到了什么发生?

go: github.com/peajack/truefetch@main: git init --bare in /usr/glenda/.config/go/cache/pkg/mod/cache/vcs/85d6972f1025dadd3cbae4796f5cd2cffa4c5c529c72c4081ee43145033f601d: exec: "git": 可执行文件未在$path中找到

注意:在ACME中,你只需在编辑器的栏中“输入一个按钮”,然后执行MOUSE3,输出将重定向到编辑器中的新列。在“ window ”(我们的“终端”)中执行命令会产生相同的结果。

你期望看到什么?

...什么都没有,只是 go 下载 truefetch 所依赖的库和包,然后编译,就像正常情况下一样。在 Plan9 上,我们拥有的最新、可用且可靠的 git 端口是 git9 ,它带有9front,可以在 /sys/src/cmd/git 找到。git 二进制文件位于 /bin/git/*go 应该调用了 git/subCommand <args> ,而不是 git subCommand <args>

zbsbpyhn

zbsbpyhn2#

请注意,"git9"并不完全兼容标准git二进制文件,您不能在不查阅手册的情况下直接将git <command> [<args>]转换为git/<command> [<args>]。例如,在这种情况下,git init --bare将是git/init -b
这应该与早于"git9"的rc wrapper from 9legacy一起工作吗?

9wbgstp7

9wbgstp73#

请注意,"git9"并不完全兼容标准的git二进制文件,您不能在不查阅手册的情况下直接将git <command> [<args>]转换为git/<command> [<args>]。例如,在这种情况下,git init --bare将是git/init -b
这不应该与早于"git9"的rc wrapper from 9legacy一起工作吗?
它不在最受欢迎的plan9发行版9front中,而且已经被弃用,以支持git9

pzfprimi

pzfprimi4#

我忘记了git9中包含的compat脚本。正如the manpage所说:
Git/compat生成一个带有兼容性存根的rc子shell,该存根位于$path中。这个兼容性存根提供了足够的Unix git命令来运行像go get这样的工具,但没有更多了。

jtw3ybtb

jtw3ybtb6#

这个工作是否应该与 rc wrapper from 9legacy 一起使用,它早于 "git9"?
它不在 9front 中,这是最受欢迎的 plan9 发行版。而且已经被弃用,改用 git9
@krstlmnn 是正确的,正如在 go wiki 中所记录的那样,wraoper 可以模拟足够多的 git,供 go 工具使用。它并不是 "in" 9front 或任何其他版本的 Plan 9 -- 它只是一个简单的 shell 脚本,你可以从 9legacy 下载,并在使用 go install 之前确保它绑定到 /bin/git 的位置。这适用于你正在使用的任何 Plan 9 版本。
9front 的 git9 命令是完全不同的东西 -- 它是 git 作为原生 Plan 9 风格文件服务器的完整重新实现。但它只适用于 9front -- 我最后一次检查时,它甚至无法在主流 Plan 9 下编译。
如果你想使用 git9 而不是通常的 Package 器,也许可以咨询作者 @oridb 关于如何为目的使用 compat 脚本。
但我认为没有必要修改 go 工具来特别适应 9front,因为已经有了一个便携式解决方案。

ddarikpa

ddarikpa7#

这里有两个不同的 Package 器:'git/compat'和基于http的 Package 器脚本。Git/compat随9front一起发行,但由于Go更改了它使用的git的功能,所以经常会出问题。
目前,模块缓存是痛苦程度最低的选项。
如果Go团队愿意接受它,调用git9将是一个更好的选择。我也很乐意尝试一下,并找出如何测试它。

bwntbbo3

bwntbbo38#

@oridb,你能举一个当前的例子,说明便携式rc wrapper不起作用吗?

相关问题