国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我們一起聊聊 Go 模塊使用 GitLab subgroups 的問題

開發(fā) 前端
追根溯源上,Go 團隊并不想完整實現(xiàn)一套完整的單獨的程序去支持這個。Go 團隊負責(zé)人 rsc(Go 模塊他獨立開發(fā)、應(yīng)用和推廣的)只想做一個符合標(biāo)準(zhǔn)的,因此 Go 最終支持了讀取 $HOME/.netrc。

大家好,我是煎魚。

最近幫忙小伙伴處理了一個小問題,感覺五六年前就有人問過我,當(dāng)年覺得沒啥大問題記錄。沒想到。。。2024 年了,還是有同學(xué)表示他的姿勢搜不到相關(guān)的解決辦法。

今天主打一個分享和記載,看看有沒有也踩過坑的朋友。(結(jié)果我發(fā)文前兩天就有社區(qū)的朋友問到了我??)

我感覺 2027 年這問題都不會解決。

功能介紹

在 GitLab 中,提供了一種叫做子組(subgroups)的功能特性。

它允許對項目倉庫進行進一步的分組,而無需創(chuàng)建多個組織去實現(xiàn)不同內(nèi)容的存放。

創(chuàng)建子組的截圖和地方:

新建子組新建子組

在項目列表下子組的展示:

列表展示列表展示

注:這個功能,我翻了下 GitHub 是沒有的。并且有人在 Community Discussions#4837 提出也想要,但官方?jīng)]有人回應(yīng)此項提議。

問題背景

雖然這個功能有一定的特色。但是子組(subgroups)和 Go 模塊管理有一定的水土不服。我們直接使用 go get 命令試圖拉取子組時,就會出現(xiàn)問題。

在最常用的 group/project 格式下,模擬 go get 命令直接拉?。?/p>

curl -X GET "https://gitlab.xxx.com/libraries/example?go-get=1"
<html><head><meta name="go-import" cnotallow="gitlab.xxx.com/libraries/example git https://gitlab.xxx.com/libraries/example.git" /></head></html>

可以看到是正常返回:gitlab.xxx.com/libraries/example.git。

那如果是子組的模式呢?

我們按照 group/subgroup/project 再獲取試試:

curl -X GET "https://gitlab.xxx.com/libraries/subgroup1/example?go-get=1"
<html><head><meta name="go-import" cnotallow="gitlab.xxx.com/libraries/subgroup1 git https://gitlab.xxx.com/libraries/subgroup1.git" /></head></html>

可以看到返回的是:gitlab.xxx.com/libraries/subgroup1.git,這顯然不正確。我們要獲取的是 gitlab.xxx.com/libraries/subgroup1/example。獲取到的層級都錯了!

不支持的原因

現(xiàn)階段來看,根本原因是 Go 的 go get 實現(xiàn)和 GitLab 的原因共同導(dǎo)致。互相不完全適配。Go 覺得 GitLab 這個太定制化,GitLab 覺得是 Go 實現(xiàn)不完整。

Go 為了使用 SSH 身份驗證,go get 需要知道項目位于什么地方,然后才能去獲取他。

以下是梳理的流程和步驟:

1、對于 group/subgroup/project 中的項目,go get 將發(fā)送以下請求:

  • GET https://gitlab.com/group/subgroup/project?go-get=1
  • GET https://gitlab.com/group/subgroup?go-get=1
  • GET https://gitlab.com/group?go-get=1

2、這些請求未經(jīng)授權(quán),因此 GitLab 無法提供指向項目的正確鏈接 (也就是預(yù)期的結(jié)果:https://gitlab.com/group/subgroup/project.git)。

3、相反,GitLab 會返回 https://gitlab.com/group/subgroup.git 作為響應(yīng)結(jié)果。(如此返回的目的是:防止未經(jīng)身份驗證的用戶訪問,避免出現(xiàn)暴露項目存在的安全風(fēng)險)

4、然后 Go 會嘗試使用 SSH 身份驗證 ssh://gitlab.com/group/subgroup.git 來 git clone 倉庫。想也知道,拉取的結(jié)果失敗了,因為這個倉庫并不存在。

因此對于 GitLab 子組中的 Go 私有項目,用戶必須通過 HTTPS 認證,這樣 Go 的 go get 命令才能通過 GitLab 的訪問校驗,再拉取到正確的響應(yīng)結(jié)果。

解決方案

現(xiàn)階段的解決方案大致有兩種,都是一些繞過校驗或邏輯的操作。

使用 .netrc 鑒權(quán)

GitLab 文檔 Authenticate Go requests to private projects[1] 和 Go 文檔 Passing credentials to private proxies[2],推薦的是通過定義 .netrc 文件來實現(xiàn)該鑒權(quán)訪問。

但有前置條件的要求:

  • GitLab 實例必須可通過 HTTPS 訪問。
  • 用到的賬號必須擁有 read_api 權(quán)限的個人訪問令牌。

根據(jù)你的 OS 環(huán)境不同,創(chuàng)建一個 .netrc 文件,并填入相關(guān)信息:

machine gitlab.example.com
login <gitlab_user_name>
password <personal_access_token>

需要注意:在 Windows 上,Go 讀取 ~/_netrc 而不是 Linux 的 ~/.netrc 文件。

或者可以直接在 GOPROXY URL 鑒權(quán)憑證:

GOPROXY=https://jrgopher:hunter2@proxy.corp.example.com

采用此方法時請務(wù)必小心:環(huán)境變量可能會出現(xiàn)在 shell 歷史記錄和日志中。(不推薦使用)

但總的來說,netrc 這個方案,有部分社區(qū)反饋不是很認可,因為有安全隱患,存在一定的風(fēng)險。還要配這配那的。

使用 replace .git 繞過邏輯

有一種方法更簡單的方法,可以跳過 go get 請求并強制 Go 直接使用 Git 身份驗證,但需要修改模塊名稱。

直接修改 go.mod 文件,采用 replace 的方式給實際引用的模塊名的項目名增加 .git。當(dāng)然,如果你不想 replace,直接引用模塊后綴是 .git 也是可以的。 

如下所示:

require(
    gitlab.xxx.com/group/subgroup/project v1.7.0
)

replace(
    gitlab.xxx.com/group/subgroup/project => gitlab.xxx.com/group/subgroup/project.git v1.7.0
)

Go 模塊能用這個騷操作的原因是:如果模塊路徑的某個組件末尾有一個 VCS 標(biāo)識符符(例如:.bzr、.fossil、.git、.hg、.svn)。go get 命令就會使用該路徑限定符之前的所有內(nèi)容作為倉庫 URL。

例如,對于 example.com/foo.git/bar 模塊,go 命令會使用 git 下載 example.com/foo.git 的版本庫,并在 bar 子目錄中找到該模塊。

總結(jié)和吐槽

比較可惜的是,這個問題,至少 7 年前(2017 年)就有人提出了,可惜到現(xiàn)在 2024 年,都沒有解決。

追根溯源上,Go 團隊并不想完整實現(xiàn)一套完整的單獨的程序去支持這個。Go 團隊負責(zé)人 rsc(Go 模塊他獨立開發(fā)、應(yīng)用和推廣的)只想做一個符合標(biāo)準(zhǔn)的,因此 Go 最終支持了讀取 $HOME/.netrc。后續(xù)至此再無更多的動作。社區(qū)反饋也不會說特別激烈。

而對于 GitLab 而已,他是乙方。客戶各種吐槽。因此他們最有動力去推進解決這個事情。

近期由于 Go 團隊多年對此的冷漠。GitLab 開始也有提出 Allow to set a go-modules folder for private Go projects[3]。

希望允許用戶在 group 或者子組為私有 Go 模塊設(shè)置 go-modules 的專屬標(biāo)識再通過第二點解決方案的 .git 的方式繞過邏輯:

預(yù)想的定制預(yù)想的定制

不過這個還在討論中,反對意見也不小。暫且茍住。

大家在實際使用上,可以先看看 .netrc 或 replace .git 的方式。可能前者更標(biāo)準(zhǔn),后者更易用。這樣團隊成員就不用每次都配置一遍了。

參考資料

[1]Authenticate Go requests to private projects: https://docs.gitlab.com/ee/user/project/use_project_as_go_package.html#authenticate-go-requests-to-private-projects

[2]Passing credentials to private proxies: https://go.dev/ref/mod#private-module-proxy-auth

[3]Allow to set a go-modules folder for private Go projects: https://gitlab.com/gitlab-org/gitlab/-/issues/437005

責(zé)任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2023-03-26 23:47:32

Go內(nèi)存模型

2024-02-26 00:00:00

Go性能工具

2022-10-28 07:27:17

Netty異步Future

2023-01-04 18:10:26

服務(wù)模塊化jre

2024-02-28 08:41:51

Maven沖突版本

2023-10-26 08:38:43

SQL排名平分分區(qū)

2023-05-29 09:07:10

SQLpageSize主鍵

2022-10-08 00:00:05

SQL機制結(jié)構(gòu)

2023-08-04 08:20:56

DockerfileDocker工具

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-06-30 08:18:51

敏捷開發(fā)模式

2023-09-10 21:42:31

2024-05-17 08:47:33

數(shù)組切片元素

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2024-02-20 21:34:16

循環(huán)GolangGo

2021-08-27 07:06:10

IOJava抽象

2021-07-12 11:35:13

Go協(xié)程Goroutine

2024-06-14 09:32:12

2024-09-09 08:53:56

點贊
收藏

51CTO技術(shù)棧公眾號

天天做天天摸天天爽国产一区| 日本久久久久久久久| www.精品在线| 国产99久久久国产精品潘金网站| 久久精品国产综合精品| 91久久国产| 国产91露脸中文字幕在线| 小说区图片区亚洲| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 亚洲成人性视频| 一区二区视频在线观看| www黄色av| 日韩一区中文| 国产精品系列在线观看| 国产日韩精品一区观看| 欧美亚洲精品在线| 成人春色在线观看免费网站| 亚洲精品国产精品国产自| 最新日本在线观看| 欧美一区二区日韩一区二区| 成人av黄色| 精品少妇一区二区三区免费观看| 久久免费视频2| 人人精品人人爱| 欧美精品人人做人人爱视频| 视频一区欧美日韩| 视频在线精品一区| 国产精品一区二区三区四区| 日韩国产小视频| 国产91在线看| 福利视频一区二区三区四区| 国产精品一区免费在线观看| 成年女人18级毛片毛片免费 | 369你懂的电影天堂| 国产精品电影院| 国产欧美婷婷中文| 天堂8中文在线| 欧美一区二区美女| 欧美6一10sex性hd| 这里只有精品视频| 女同一区二区三区| 91天堂在线视频| 日本午夜一区二区| 欧美性大战久久久久xxx| 99re6这里只有精品| 国产九九精品视频| 在线视频精品| 国产免费xxx| 国产欧美1区2区3区| 中文官网资源新版中文第二页在线观看 | 国产亚av手机在线观看| 亚洲视频在线观看网站| 看亚洲a级一级毛片| 91精品国产91久久久久久久久| 日韩国产综合| 日韩不卡av| 26uuu精品一区二区在线观看| 影音先锋在线影院| 91麻豆精品久久久久蜜臀| 成人久久18免费网站麻豆| av五月婷婷| 成人免费视频国产在线观看| 综合激情丁香| 色狠狠一区二区三区香蕉| 日本中文字幕中出在线| 久久综合电影一区| 99国产精品免费视频观看| 视频一区视频二区视频| 国产亚洲欧美色| 青春有你2免费观看完整版在线播放高清| 精品国产欧美一区二区| 国产91久久久久蜜臀青青天草二| 国产成人精品视频在线观看| 精品一二三区视频| 国产亚洲精品久久久久久牛牛 | 欧美精品日日鲁夜夜添| 国产精品亚洲欧美日韩一区在线| 国产精品久久久久免费a∨大胸| 日韩黄色在线观看| 狠狠色一日本高清视频| 精品视频偷偷看在线观看| 西瓜成人精品人成网站| 影音先锋亚洲视频| 亚洲风情在线资源站| 日韩欧美视频免费在线观看| 亚洲欧美一区二区三区极速播放 | 91九色在线免费视频| 成人一区二区在线观看| 国产资源在线观看| 久久精品青青大伊人av| 一区二区三区国产盗摄| 男女羞羞电影免费观看| 亚洲精品中文字| 久久中文亚洲字幕| 日韩av在线播放不卡| 4438成人网| 欧美三级美国一级| 欧美 国产 综合| 欧美一级xxx| 日韩在线理论| 奇米影音第四色| 中文字幕亚洲一区| 久久夜色精品| 性网站在线看| 青青精品视频播放| 久久久午夜电影| 91吃瓜在线观看| 官网99热精品| 亚洲国产另类精品专区| www.国产精品一区| 日本成人性视频| 91精品国产一区二区| 欧美二区视频| 3d动漫精品啪啪一区二区三区免费| 东方aⅴ免费观看久久av| 九色porny在线| 成人网页在线免费观看| 中文字幕一区二区在线播放 | 美女色狠狠久久| 色噜噜色狠狠狠狠狠综合色一| 一本色道久久综合亚洲aⅴ蜜桃| 免费一区二区| 久草在线国产| 97精品久久久久中文字幕| 2021中文字幕在线| 欧美日韩无遮挡| 欧美日本免费一区二区三区| 欧美婷婷在线| 韩国福利在线| 91在线在线观看| 色成人在线视频| 午夜久久黄色| jzzjzzjzz亚洲成熟少妇| 成人有码在线视频| 一级日本不卡的影视| 先锋影音国产精品| 免费黄色av电影| 精品视频一区三区九区| 国产精品99一区二区三区| 成视频在线免费观看| 国产精品久久久久久久久久小说| 亚洲视频一区二区免费在线观看| 日韩有码中文字幕在线| 国产福利在线播放| 国产精品久久久久久久久久久久久久 | 欧美激情第10页| 日韩黄色影院| 欧美最大成人综合网| 亚洲国产精品久久久久秋霞蜜臀 | 国产呦系列欧美呦日韩呦| 欧美亚洲国产一区二区三区va | av天在线观看| 欧美日韩高清在线一区| 精品毛片乱码1区2区3区| 久久国产精品99精品国产| jizz亚洲女人高潮大叫| 9久久婷婷国产综合精品性色| 欧美在线一级视频| 色综合久久久久网| 巨乳诱惑日韩免费av| 都市激情综合| 成人综合久久| 999日本视频| 国内高清免费在线视频| 625成人欧美午夜电影| 最新中文在线视频| 美国三级日本三级久久99| 日韩激情在线视频| 99国产精品久| 丰满放荡岳乱妇91ww| 韩国久久久久| av在线精品| 黄色成人在线网| 黄色av网址在线免费观看| 日韩精品一区二区三区色欲av| 日本91av在线播放| 69av成年福利视频| 北条麻妃一区二区三区中文字幕| 亚洲人成啪啪网站| 一本久道中文字幕精品亚洲嫩| 在线亚洲欧美| 国产精品毛片一区二区在线看| 欧美影院一区| 欧美日韩爱爱| 91精品尤物| а√在线中文在线新版| 在线免费观看黄| 制服诱惑一区| 台湾成人av| 日韩亚洲欧美成人| 日韩精品中文字幕在线播放| 亚洲视频在线一区二区| 99精品国产99久久久久久白柏| 国产二区国产一区在线观看| 久久亚洲电影| 久久国产精品99久久久久久老狼| 亚洲一区二区成人| 精品嫩草影院久久| 国产精品对白一区二区三区| 亚洲国产精品t66y|