- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在本地服务器上有一个git repo。我可以使用git clone user@10.xxx.yyy.zzz:/srv/git/liqid.git
从其中克隆用户可以通过ssh访问并读取/写入git/目录的文件。
当我尝试将其与go get -v user@10.xxx.yyy.zzz:/srv/git/liqid.git
结合使用时go: cannot use path@version syntax in GOPATH mode
我尝试了其他各种组合,例如省略了:
,但是它们都失败了。go get
可以与本地服务器上的存储库一起使用吗?
最佳答案
这是我在git repo在私有(private)服务器上时对包和模块使用go get
的知识。我希望它可以帮助其他人将所有步骤记录在一个地方。
在私有(private)服务器上将包和模块与git仓库一起使用
这是在私有(private)服务器上将Go包和模块与git存储库一起使用所需的所有步骤。这些是具有IP地址(例如10.xxx.yyy.zzz或192.168.xxx.yyy)的服务器。假定这些服务器上不存在github或gitlab,因此端口80上没有运行Web服务器,这是go get
所基于的假设。您的私有(private)服务器只需要运行sshd
。
安装最新版本的Go,并确保已设置GOPATH。这些示例中的代码将下载到GOPATH中的第一个元素。
您将需要在网络上另一台计算机上创建git存储库。这将是您的私有(private)git服务器。
如果要跳过所有设置步骤和示例代码,可以检查两个关键差异部分,该部分列出了在私有(private)服务器而不是公共(public)git存储库中使用软件包或模块时的区别。
源代码
对于软件包和模块,将dateutil.go
和stringutil.go
放在下面显示的目录结构中。
dateutil.go:
package datepackage
import "time"
func GetTime() time.Time {
return time.Now().Local()
}
stringutil.go:
package stringpackage
import "strings"
func ToUpperCase(s string) string {
return strings.ToUpper(s)
}
main.go(将main.go放在下面所示目录结构之外的某个位置):
package main
import (
"fmt"
"github.com/your-github-username/go-package-test-dateutil/datepackage"
"github.com/your-github-username/go-package-test-stringutil/stringpackage"
)
func main() {
fmt.Println("github: " + stringpackage.ToUpperCase("test"))
fmt.Println("github: " + datepackage.GetTime().String())
}
这些文件可以在github.com上找到
git@github.com:dwschulze/go-package-test-dateutil.git
git@github.com:dwschulze/go-package-test-stringutil.git
git@github.com:dwschulze/go-module-package-test-drivers.git
使用GOPATH约定创建软件包
package
├── github
│ ├── dateutil
│ │ └── src
│ │ └── datepackage
│ │ └── dateutil.go
│ └── stringutil
│ └── src
│ └── stringpackage
│ └── stringutil.go
└── your-local-git-repo-hostname
├── dateutil
│ └── src
│ └── datepackage
│ └── dateutil.go
└── stringutil
└── src
└── stringpackage
└── stringutil.go
your-local-git-repo-hostname
是您要在其中创建git repos的私有(private)git服务器的主机名或IP地址(而不是当前拥有此代码的机器)。有一个未记录的要求,即
go get
命令的主机名中包含
.
。如果您的私有(private)git服务器的主机名中没有
.
,请使用其IP地址。使用
ssh-copy-id
将ssh key 访问权限添加到您的私有(private)git服务器。
src/
创建的
github/
下的两个
git init
目录中创建git repos
package
├── github
│ ├── dateutil
│ │ └── src
│ │ └── ...
│ └── stringutil
│ └── src
| └── ...
将
datepackage/
和
stringpackage/
dirs分别添加并提交到您的git repos中。
go-package-test-dateutil
和
go-package-test-stringutil
的私有(private)github仓库。请按照说明在
src/
目录中的本地git仓库中将 Remote 设置为它们各自的github仓库。推送代码。
go get
默认使用https,因此您需要将其添加到
~/.gitconfig
文件中:
git config --global url."git@github.com:".insteadOf "https://github.com/"
运行以下命令,将您刚刚推送到github.com的代码放入
GOPATH
中:
go get github.com/your-github-username/go-package-test-stringutil/stringpackage/
go get github.com/your-github-username/go-package-test-dateutil/datepackage/
这些包将下载到GOPATH中第一个元素的
pkg/
和
src/
目录中。
main.go
文件的目录中,键入
go run main.go
,结果将打印到控制台。
git init --bare
即可。无需安装github或gitlab。在您的私有(private)git服务器上,您需要运行
sshd
并从代码所在的计算机上具有ssh key 访问权限。新的存储库将在
/home/myusername/gitrepo
中。
git init /home/myusername/gitrepo/go-package-test-dateutil --bare
git init /home/myusername/gitrepo/go-package-test-stringutil --bare
go get
命令有一个未记录的要求,即主机名中必须包含
.
。如果私有(private)git服务器的主机名中没有
.
,则使用其IP地址,这就是本示例其余部分的内容。假设机器的IP地址为192.168.0.12
dateutil.go
和
stringutil.go
文件复制到
your-local-git-repo-hostname
下的目录中:
package
├── github
| ...
└── your-local-git-repo-hostname
├── dateutil
│ └── src
│ └── datepackage
│ └── dateutil.go
└── stringutil
└── src
└── stringpackage
└── stringutil.go
在两个
src/
目录中,像以前一样创建本地git repos,然后添加并提交代码。将 Remote 设置为您在私有(private)git服务器上创建的git repo
git remote add origin myusername@your-local-git-repo-hostname:gitrepo/go-package-test-dateutil
git remote add origin myusername@your-local-git-repo-hostname:gitrepo/go-package-test-stringutil
您需要在
~/.gitconfig
中为您的私有(private)git服务器添加另一个条目:
git config --global url."myusername@your-local-git-repo-hostname:".insteadOf "https://192.168.0.12/"
现在推送代码。请注意,该代码尚未在您的GOPATH中。
go get
从您的私有(private)git服务器检索代码。有必要在您的私有(private)git服务器上使用
git init --bare
创建git repos的目录名称中添加“.git”后缀。这就告诉
go get
这是一个git存储库,而不是其他版本控制系统。
go get 192.168.0.12/gitrepo/go-package-test-stringutil.git/stringpackage
go get 192.168.0.12/gitrepo/go-package-test-dateutil.git/datepackage
软件包将下载到
GOPATH
中第一个元素的pkg/和src/目录中。
└── src
├── 192.168.0.12
│ └── gitrepo
│ ├── go-module-test-dateutil.git
│ │ ├── dateutil.go
│ │ └── go.mod
│ ├── go-package-test-dateutil.git
│ │ └── datepackage
│ │ └── dateutil.go
│ └── go-package-test-stringutil.git
│ └── stringpackage
│ └── stringutil.go
在
main.go
代码中,将两个import语句添加到私有(private)git服务器上的包中
package main
import (
dpkg "192.168.0.12/gitrepo/go-package-test-dateutil.git/datepackage"
strpkg "192.168.0.12/gitrepo/go-package-test-stringutil.git/stringpackage"
"fmt"
"github.com/your-github-username/go-package-test-dateutil/datepackage"
"github.com/your-github-username/go-package-test-stringutil/stringpackage"
)
func main() {
fmt.Println("github: " + stringpackage.ToUpperCase("test"))
fmt.Println("github: " + datepackage.GetTime().String())
fmt.Println("local: " + strpkg.ToUpperCase("test"))
fmt.Println("local: " + dpkg.GetTime().String())
}
请注意,在两个新的
dpkg
语句中使用了别名
strpkg
和
import
,因为
import
语句具有重复的程序包名称(import语句中的最后一个元素)。
go run main.go
运行代码。
go get
和import
语句中的主机名必须在其中包含一个点packages/
目录的目录结构。从上方复制
dateutil.go
和
stringutil.go
文件。将package语句分别更改为
datemod
和
stringmod
。稍后将创建
go.mod
文件。
module
├── github
│ ├── datemodule
│ │ ├── dateutil.go
│ │ └── go.mod
│ └── stringmodule
│ ├── go.mod
│ └── stringutil.go
└── 192.168.0.12
├── datemodule
│ ├── dateutil.go
│ └── go.mod
└── stringmodule
├── go.mod
└── stringutil.go
请注意,目录名称与软件包名称不同。软件包不必遵循目录名。
go.mod
文件:
github/datemodule/
go mod init github.com/your-github-username/go-module-test-dateutilmod
用
github/stringmodule/
go mod init github.com/your-github-username/go-module-test-stringutilmod
用
192.168.0.12/datemodule/
go mod init 192.168.0.12/gitrepo/go-module-test-dateutil.git
用
192.168.0.12/stringmodule/
go mod init 192.168.0.12/gitrepo/go-module-test-stringutil.git
在上面的四个
datemodule/
和
stringmodule/
目录中,使用
git init
创建一个git repo并添加并提交文件。
go-module-test-dateutilmod
和
go-module-test-stringutilmod
的私有(private)仓库。按照说明在
github/
目录下的相应本地git存储库中设置 Remote 。推送代码。
git init /home/myusername/gitrepo/go-module-test-dateutil --bare
git init /home/myusername/gitrepo/go-module-test-stringutil --bare
使用以下命令在
192.168.0.12/
目录下的相应git仓库中设置 Remote
git remote add origin myusername@192.168.0.12:gitrepo/go-package-test-dateutil
git remote add origin myusername@192.168.0.12:gitrepo/go-package-test-stringutil
推送代码。
main.go
程序以使用以下模块:
package main
import (
datemodlocal "192.168.0.12/gitrepo/go-module-test-dateutil.git"
stringmodlocal "192.168.0.12/gitrepo/go-module-test-stringutil.git"
"fmt"
"github.com/your-github-username/go-module-test-dateutilmod"
"github.com/your-github-username/go-module-test-stringutilmod"
)
func main() {
fmt.Println("github: " + stringmod.ToUpperCase("test"))
fmt.Println("github: " + datemod.GetTime().String())
fmt.Println("local: " + stringmodlocal.ToUpperCase("test"))
fmt.Println("local: " + datemodlocal.GetTime().String())
fmt.Println("local toString: " + datemodlocal.GetTimeStr())
}
要将模块与私有(private)仓库一起使用,我们必须设置
GOPRIVATE
go env -w GOPRIVATE=192.168.0.12/gitrepo/*,github.com/your-github-username/*
设置
GOPRIVATE
时,将直接从指定的git repos而不是
Go public proxy提取模块。
$ go mod init module-driver
go: creating new go.mod: module module-driver
$ cat go.mod
module module-driver
go 1.15
现在执行
main.go
。在运行代码之前,它将从github.com和您的私有(private)git服务器下载模块:
$ go run main.go
go: finding module for package github.com/dwschulze/go-module-test-dateutilmod
go: finding module for package github.com/dwschulze/go-module-test-stringutilmod
go: finding module for package 192.168.0.12/gitrepo/go-module-test-stringutil.git
go: finding module for package 192.168.0.12/gitrepo/go-module-test-dateutil.git
go: downloading 192.168.0.12/gitrepo/go-module-test-stringutil.git v0.0.1
go: downloading 192.168.0.12/gitrepo/go-module-test-dateutil.git v0.0.3
go: downloading github.com/dwschulze/go-module-test-dateutilmod v0.0.1
go: downloading github.com/dwschulze/go-module-test-stringutilmod v0.0.1
go: found 192.168.0.12/gitrepo/go-module-test-dateutil.git in 192.168.0.12/gitrepo/go-module-test-dateutil.git v0.0.3
go: found 192.168.0.12/gitrepo/go-module-test-stringutil.git in 192.168.0.12/gitrepo/go-module-test-stringutil.git v0.0.1
go: found github.com/dwschulze/go-module-test-dateutilmod in github.com/dwschulze/go-module-test-dateutilmod v0.0.1
go: found github.com/dwschulze/go-module-test-stringutilmod in github.com/dwschulze/go-module-test-stringutilmod v0.0.1
github: TEST
github: 2020-12-08 07:57:02.969147007 -0700 MST
local: TEST
local: 2020-12-08 07:57:02.969220121 -0700 MST
local toString: 2020-12-08 07:57:02.969222359 -0700 MST (dev2 branch)
local GetTimeStr3: 2020-12-08 07:57:02.96925053 -0700 MST (dev2 branch)
在运行代码之前,您不必运行
go get
即可下载这些模块。
go.mod
也已修改
$ cat go.mod
module module-driver
go 1.15
require (
192.168.0.12/gitrepo/go-module-test-dateutil.git v0.0.3 // indirect
192.168.0.12/gitrepo/go-module-test-stringutil.git v0.0.1 // indirect
github.com/dwschulze/go-module-test-dateutilmod v0.0.1 // indirect
github.com/dwschulze/go-module-test-stringutilmod v0.0.1 // indirect
)
您可以通过go get下载模块来测试您的环境设置是否正确:
go get 192.168.0.12/gitrepo/go-module-test-dateutil.git
go get 192.168.0.12/gitrepo/go-module-test-stringutil.git
go get github.com/your-github-username/go-module-test-dateutilmod
go get github.com/your-github-username/go-module-test-stringutilmod
再次注意私有(private)git服务器的存储库路径上
.git
后缀的使用。没有这个
go get
将使用https而不是git(它将使用ssh)。
go get
会修改
go.mod
文件。有些人说您可以手动修改
go.mod
文件,而其他人则说您不应该手动编辑
go.mod
,而应使用
go get
进行任何修改。
go get
或
go run main.go
下载模块代码会将代码下载到
$GOPATH/pkg/mod
中。由于未指定版本,它将为该模块提取最新的
semantic version tag。
semver
,它将提取该版本。
go get 192.168.0.12/gitrepo/go-module-test-dateutil.git@v0.0.1
如果已经存在,这将更新
go.mod
中的条目
$GOPATH/pkg/mod/
目录,然后再次执行
go run main.go
。您将看到Go在运行代码之前下载所需的模块。
GOPRIVATE
设置go env -w GOPRIVATE=...
go get
可以使用分支。如果要对分支的最新提交进行
go get
编码,则可以添加
@branchname
如下所示:
go get 192.168.0.12/gitrepo/go-module-test-dateutil.git@branchname
如果分支上的最新提交没有
semver
标记,那么
go get
将使用下一个
semver
标记编号以及时间戳和哈希值来创建伪版本。
410 Gone
错误是什么意思?
go get github.com/your-github-username/go-module-test-dateutilmod
go: downloading github.com/your-github-username/go-module-test-dateutilmod v0.0.1
go get github.com/your-github-username/go-module-test-dateutilmod: github.com/your-github-username/go-module-test-dateutilmod@v0.0.1: verifying module: github.com/your-github-username/go-module-test-dateutilmod@v0.0.1: reading https://sum.golang.org/lookup/github.com/your-github-username/go-module-test-dateutilmod@v0.0.1: 410 Gone
server response: not found: github.com/your-github-username/go-module-test-dateutilmod@v0.0.1: invalid version: unknown revision v0.0.1
如果您没有设置GOPRIVATE,则可能会发生这种情况。 Go会尝试从Go公共(public)代理检索您的(私有(private))模块,但无法在其中找到它们。
关于go - 我该如何在本地服务器上使用仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60645866/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!