第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我怎樣才能讓 go 與本地服務(wù)器上的存儲庫一起工作

我怎樣才能讓 go 與本地服務(wù)器上的存儲庫一起工作

Go
千巷貓影 2023-08-14 17:47:47
我在本地服務(wù)器上有一個 git 存儲庫。我可以通過git clone user@10.xxx.yyy.zzz:/srv/git/liqid.git用戶具有 ssh 訪問權(quán)限的位置進(jìn)行克隆,并讀取/寫入 git/ 目錄。當(dāng)我嘗試將它與go get -v user@10.xxx.yyy.zzz:/srv/git/liqid.git它一起使用時go: cannot use path@version syntax in GOPATH mode我嘗試過各種其他組合,例如省略:,但它們都失敗了??梢詆o get使用本地服務(wù)器上的存儲庫嗎?
查看完整描述

1 回答

?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗 獲得超9個贊

以下是我了解到go get當(dāng) git 存儲庫位于私有服務(wù)器上時如何使用包和模塊。我希望它可以幫助其他人將所有步驟記錄在一個地方。


在私有服務(wù)器上使用帶有 git 存儲庫的包和模塊


以下是在私有服務(wù)器上通過 git 存儲庫使用 Go 包和模塊所需的所有步驟。這些服務(wù)器的 IP 地址為 10.xxx.yyy.zzz 或 192.168.xxx.yyy。假設(shè)這些服務(wù)器上不存在 github 或 gitlab,因此端口 80 上沒有運(yùn)行 Web 服務(wù)器,這是所go get基于的假設(shè)。您的私人服務(wù)器只需要sshd運(yùn)行即可。


安裝最新版本的 Go 并確保設(shè)置 GOPATH。GOPATH 中的第一個元素是將這些示例中的代碼下載到的位置。


您的網(wǎng)絡(luò)上需要另一臺計算機(jī),您將在其中創(chuàng)建 git 存儲庫。這將是您的私人 git 服務(wù)器。


如果您想跳過所有設(shè)置步驟和示例代碼,您可以檢查兩個主要差異部分,其中列出了在私有服務(wù)器而不是公共 git 存儲庫中使用包或模塊時的差異。


源代碼


將dateutil.go和放入stringutil.go如下所示的包和模塊的目錄結(jié)構(gòu)中。


日期實用程序:


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 放置在如下所示的目錄結(jié)構(gòu)之外的某個位置):


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 約定創(chuàng)建包


在 GOPATH 之外創(chuàng)建一個像這樣的目錄結(jié)構(gòu)并添加上面的文件。這遵循 GOPATH 約定,但您不需要 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是您將在其中創(chuàng)建 git 存儲庫的私有 git 服務(wù)器的主機(jī)名或 IP 地址(不是您當(dāng)前擁有此代碼的計算機(jī))。有一個未記錄的要求,即go get命令的主機(jī)名中包含.。如果您的私有 git 服務(wù)器的主機(jī)名中沒有 ,.則使用其 IP 地址。添加 ssh 密鑰訪問您的私有 git 服務(wù)器ssh-copy-id。


使用 github 上的私有存儲庫


我們將從最簡單的情況開始,使用 github.com 中的包。您需要一個具有 ssh 密鑰訪問設(shè)置的 github 帳戶。


在上面創(chuàng)建的兩個src/目錄中創(chuàng)建 git reposgithub/git init


package

├── github

│   ├── dateutil

│   │   └── src

│   │       └── ...

│   └── stringutil

│       └── src

|           └── ...

datepackage/分別將和目錄添加并提交stringpackage/到您的 git 存儲庫。


在您的 github.com 帳戶中創(chuàng)建兩個名為go-package-test-dateutil和的私有 github 存儲庫。go-package-test-stringutil按照說明將目錄中本地 git 存儲庫中的遙控器設(shè)置src/為各自的 github 存儲庫。推一下代碼。


由于您的存儲庫是私有的,您必須使用 ssh 公鑰訪問來下載代碼。由于go get默認(rèn)使用 https,因此您需要將其添加到您的~/.gitconfig文件中:


git config --global url."git@github.com:".insteadOf "https://github.com/"

運(yùn)行這些命令將您剛剛推送到 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在上面創(chuàng)建的文件所在的目錄中,鍵入go run main.go內(nèi)容,結(jié)果將打印到控制臺。


在您的私人服務(wù)器上創(chuàng)建 Git 存儲庫


現(xiàn)在您將在您的私有 git 服務(wù)器上創(chuàng)建 git 存儲庫。為了保持簡單,您只需使用git init --bare. 無需安裝 github 或 gitlab。在您的私人 git 服務(wù)器上,您需要sshd從代碼所在的計算機(jī)上運(yùn)行并具有 ssh 密鑰訪問權(quán)限。新的存儲庫將位于/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命令有一個未記錄的要求,即主機(jī)名.中包含一個。如果您的私有 git 服務(wù)器的主機(jī)名中沒有 ,.則使用其 IP 地址,這就是我在本示例的其余部分中將執(zhí)行的操作。假設(shè)機(jī)器的IP地址是192.168.0.12


dateutil.go將您之前創(chuàng)建的和文件復(fù)制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/目錄中像之前一樣創(chuàng)建本地 git 存儲庫,然后添加并提交代碼。將遙控器設(shè)置為您在私人 git 服務(wù)器上創(chuàng)建的 git 存儲庫


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您的私人 git 服務(wù)器需要另一個條目:


git config --global url."myusername@your-local-git-repo-hostname:".insteadOf "https://192.168.0.12/"

現(xiàn)在推送代碼。請注意,此代碼尚未在您的 GOPATH 中。


用于go get從您的私人 git 服務(wù)器檢索代碼。需要在您git init --bare的私有 git 服務(wù)器上創(chuàng)建 git 存儲庫的目錄名稱中添加“.git”后綴。這表明go get這是一個 git 存儲庫而不是其他版本控制系統(tǒng)。


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.


└── 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 語句添加到您的私有 git 服務(wù)器上的包中


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和的使用,因為這些語句具有重復(fù)的包名稱(導(dǎo)入語句中的最后一個元素)。strpkgimportimport


現(xiàn)在您可以使用 運(yùn)行代碼go run main.go。


在 guthub.com 上使用私有存儲庫和在私有 git 服務(wù)器上使用存儲庫之間的主要區(qū)別:


修改~/.gitconfig

在 go get 語句中添加 .git 后綴

go get和 語句中的主機(jī)名import必須有一個點(diǎn)

使用私有存儲庫創(chuàng)建模塊


創(chuàng)建一個與packages/上面創(chuàng)建的目錄平行的目錄結(jié)構(gòu)。復(fù)制上面的dateutil.go和stringutil.go文件。將包語句分別更改為datemod和stringmod。您go.mod稍后將創(chuàng)建這些文件。


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通過在這些目錄中執(zhí)行以下命令來生成文件:


在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/創(chuàng)建一個 git 存儲庫,并git init添加并提交文件。


在 github.com 上創(chuàng)建兩個名為go-module-test-dateutilmod和的私有存儲庫go-module-test-stringutilmod。按照說明在目錄下各自的本地 git 存儲庫中設(shè)置遙控器github/。推一下代碼。


在你的私人 git 服務(wù)器上創(chuàng)建兩個 git 存儲庫


git init /home/myusername/gitrepo/go-module-test-dateutil --bare


git init /home/myusername/gitrepo/go-module-test-stringutil --bare

192.168.0.12/在目錄下的相應(yīng) git 存儲庫中設(shè)置遙控器


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

推一下代碼。


現(xiàn)在您有四個不同的模塊,每個模塊兩個位于您的 github.com 帳戶和您的私人 git 服務(wù)器的存儲庫中。


在另一個目錄中創(chuàng)建一個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())

}

要將模塊與私有存儲庫一起使用,我們必須設(shè)置GOPRIVATE


go env -w GOPRIVATE=192.168.0.12/gitrepo/*,github.com/your-github-username/*

設(shè)置后,GOPRIVATE模塊將直接從指定的 git 存儲庫而不是Go 公共代理中拉取。


現(xiàn)在運(yùn)行


$ go mod init module-driver

  go: creating new go.mod: module module-driver

$ cat go.mod

  module module-driver


  go 1.15

現(xiàn)在執(zhí)行main.go. 在運(yùn)行代碼之前,它將從 github.com 和您的私人 git 服務(wù)器下載模塊:


$ 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在運(yùn)行代碼之前,您不必運(yùn)行來下載這些模塊。也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 下載模塊來測試您的環(huán)境設(shè)置是否正確:


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

.git再次注意您的私有 git 服務(wù)器的存儲庫路徑上的后綴的使用。如果沒有這個,go get將使用 https 而不是 git (它將使用 ssh)。


運(yùn)行g(shù)o get會修改go.mod文件。雖然有些人說您可以手動修改go.mod文件,但另一些人則說您不應(yīng)該go.mod手動編輯,而應(yīng)該使用它go get來進(jìn)行任何修改。


使用go get或下載模塊代碼go run main.go會將代碼下載到$GOPATH/pkg/mod. 由于未指定版本,它將提取該模塊的最新語義版本標(biāo)簽。


語義版本控制是通過標(biāo)簽完成的,這些標(biāo)簽只是一個提交。標(biāo)簽獨(dú)立于分支,因此如果最新版本semver是在 master 以外的分支上完成的,它將拉取該版本。


要指定特定版本,請使用


go get 192.168.0.12/gitrepo/go-module-test-dateutil.git@v0.0.1

go.mod如果條目已存在,這將更新該條目


您應(yīng)該能夠刪除$GOPATH/pkg/mod/目錄并go run main.go再次執(zhí)行此操作。您將看到 Go 在運(yùn)行代碼之前下載所需的模塊。


使用私有存儲庫中的模塊時的主要區(qū)別


修改~/.gitconfig

為您的私有服務(wù)器上的存儲庫添加 .git 后綴

您的私有服務(wù)器的主機(jī)名中必須有一個點(diǎn),或者使用其 IP 地址

設(shè)置GOPRIVATE為go env -w GOPRIVATE=...

在不同的分支上使用代碼


語義版本標(biāo)簽獨(dú)立于分支,但有一種情況go get可以使用分支。如果您想要go get來自分支的最新提交,您可以@branchname像這樣附加:


go get 192.168.0.12/gitrepo/go-module-test-dateutil.git@branchname

如果分支上的最新提交沒有標(biāo)簽,semver將go get使用下一個標(biāo)簽號以及時間戳和哈希值創(chuàng)建偽版本semver。


常見問題解答


410 Gone下載模塊時出現(xiàn)錯誤意味著什么?


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

如果您沒有設(shè)置 GOPRIVATE,則可能會發(fā)生這種情況。Go 嘗試從 Go 公共代理檢索您的(私有)模塊,但它在那里找不到它們。


查看完整回答
反對 回復(fù) 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號