国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一篇文章徹底弄懂Golang私有倉庫配置問題

這篇具有很好參考價值的文章主要介紹了一篇文章徹底弄懂Golang私有倉庫配置問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引言:

一般通過 go get 拉取的是公共倉庫的代碼(如: github.com中的代碼),是不需要任務權限就能拉下來。但當我們配置的私有倉庫一般都需要用戶名密碼來登錄才能拉取代碼,所以私有倉庫主要是解決認證問題。

了解 go get

在早期版本的Go中,“go get”用于構建和安裝包。現(xiàn)在,“go get”專門用于調整go.mod中的依賴項,即下載所需要的包。'go install'可以用來構建和安裝命令。go get通常也是使用 git、svn等工具進行拉取所需要的包。怎么決定使用哪個工具呢?

1. 通過靜態(tài)方式

1.1 通過倉庫域名

例如:go get github.com/example/pkg

域名為github.com go就直接使用 git 工具進行拉取。

1.2 通過后綴

例如:go get github.com/example/pkg.git

后綴為.git,也直接使用 git 工具進行拉取。

2. 通過動態(tài)方式

選擇動態(tài)方式是因為域名和后綴都無法判斷倉庫類型,所以一般私有的倉庫會使用動態(tài)方式。

通過在go get 命令中加 -v參數(shù)能夠看到將請求的結果 go get -v git.test.com/example/pkg

2.1 詢問倉庫

go get 時,go 會先使用 //git.test.com/example/pkg?go-get=1 請求再從結果中判斷使用哪個工具拉取。

2.2 分析結果

返回結果如下:

<html>
	<head>
		<meta name="go-import" content="git.test.com/example/pkg git http://git.test.com/example/pkg.git" />
		<meta name="go-source" content="git.test.com/example/pkg http://git.test.com/example/pkg http://git.test.com/example/pkg/-/tree/master{/dir} http://git.test.com/example/pkg/-/blob/master{/dir}/{file}#L{line}" />
	</head>
	<body>go get http://git.test.com/example/pkg</body>
</html>

其中:<meta name="go-import" content="git.test.com/example/pkg git http://git.test.com/example/pkg.git" />content的值分3段,格式為:

<meta name="go-import" content="root-path vcs repo-url" />

  • root-path: 模塊名字,如:git.test.com/example/pkg

  • vcs: 使用的管理工具,如: git

  • repo-url:指的是模塊原代碼存放在哪個倉庫下面,該倉庫就需要是協(xié)議加倉庫地址的形式。如:http://git.test.com/example/pkg.git

那么go就知道使用哪個工具拉取包了。

git認證

知道從哪里拉取、怎么拉取,正常就可以拉取go包了,但私有倉庫需要git認證。git拉取代碼認證的方式有3種:

URI的完整格式:

schema://username:password@host:port?query#fragment

  • ?

    schema: 協(xié)議,如http/https/ftp等

  • ?

    username: 用戶名

  • ?

    password: 密碼

  • ?

    host: ip或域名

  • ?

    port: 端口

  • ?

    query: 查詢字符串

  • ?

    fragment: 錨點

1. 用戶名、密碼

需要在拉取時輸入用戶名密碼,但go get時禁止交互(彈框,提示輸入用戶名密碼),我們可以參考URI格式使用 URL中添加用戶名密碼,即可。但我們go get時也沒辦法去改這個呀,后面介紹使用 git的 insteadof解決。

如:http://root:passpwd@git.test.com/example/pkg

2. 用戶名、access token(推薦使用)

作用和功能同1中的用戶名、密碼。只是一般用戶名密碼是用來登錄的,如果把密碼暴露了(因為這種認證會保存在git配置中,后面會介紹)就不太好了,本來只想讓程序去拉取一個倉庫代碼,結果別人知道密碼了,直接登錄上去了。token生成時是可以設置權限的,更為安全,使用在拉取代碼時只給 read_repository權限即可。

3. ssh

可以在本地創(chuàng)建非對稱的加密對(ssh-keygen)。把公鑰放到倉庫里面去。

git的insteadof

git的insteadof在拉取代碼,發(fā)送請求前替換請求地址。格式如下:

git config --global url."https://$GIT_USER:$GIT_TOKEN@$GOPRIVATE".insteadOf "https://$GOPRIVATE"

表示在請求 https://$GOPRIVATE 倉庫時,會被替換成 https://$GIT_USER:$GIT_TOKEN@$GOPRIVATE,即包含了用戶名和密碼,所以會拉取成功。

注:必須設置成 --global 與 --system,git 支持 --global、--local、--system。

  • --system 作用范圍太大了,此機器的其他用戶或項目都使用了此設置。

  • --local只能針對當前項目(所以必須在項目所在目錄,它會找.git目錄中的設置),go使用git命令時目錄可能存在問題?!疚打炞C】

例如:

git config --global url."https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com".insteadOf "http://git.test.com"

表示在請求http://git.test.com私有倉庫的包時會被替換成https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com,這里的root是倉庫的用戶名,VUQsGPQdxy5CDQ9xEs24是access token,

注:網(wǎng)上有人說 insteadOf后面的域名必須帶 /http://git.test.com/,insteadOf前端字符串必須帶:,即:https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com:??赡苁瞧脚_或配置原因。根據(jù)自己的實際情況替換即可。

例如:

go get -v git.test.com/example/pkg 前,先通過 //git.test.com/example/pkg?go-get=1 進行訪問,看返回的頁面的實際協(xié)議,如我這里body中的:go get http://git.test.com/example/pkg

那么說明我的go get git.test.com/example/pkg 將被替換為`go get http://git.test.com/example/pkg(注:go 自動完成)

這時我需要將用戶名和access token,添加上,所以要把 http://git.test.com 替換為https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com(需要我們手動配置git config)

最終替換完的結果將是:https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com/example/pkg

這時go會使用最終的地址進行git clone https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com/example/pkg

完整流程

  1. 1.

    在GOPRIVATE環(huán)境變量中加入私有倉庫地址。

    go env -w GOPRIVATE=git.test.com

    此時另外兩個GO的環(huán)境變量正常也會自動被設置與GOPRIVATE設置的值相同:(如果沒有改過來,請自行檢查并修改)

    set GONOPROXY=git.test.com  # 拉取git.test.com時不使用GOPROXY代理服務器
    set GONOSUMDB=git.test.com  # 拉取包成功后不進行簽名校驗,因為我們的私有庫沒有生成簽名
  2. 2.

    設置git config地址替換

    git config --global url."https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com".insteadOf "http://git.test.com"

    這個設置會被保存在git全局的配置文件中。如我的window位置為:C:\Users\lxz\.gitconfig文件

    內容如下:

    ...省略不相關的配置
    [url "https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com"]
    	insteadOf = http://git.test.com

    小知識點:引號中的內容會被設置在配置項目名稱后面,中括號內(如:https://root:...),不帶引號被設置在配置項內部(如: insteadOf

  3. 3.

    進行拉取即可

    go get git.test.com/example/pkg

其他

1. 有時候配置了 git config 的insteadOf 后還是不好使,可能是因為之前設置過,需要把之前的刪除。

先查看所有設置

> git config --global -l

# 結果顯示

...省略不相關的配置
url.https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com.insteadof=http://git.test.com
...省略不相關的配置

再進行刪除(復制=號之前的所有字符串)

git config --global --unset url.https://root:VUQsGPQdxy5CDQ9xEs24@git.test.com.insteadof

2. 憑證管理

git憑證管理和git本身是兩個獨立的程序,憑證管理工具位置有git安裝目錄中,例如我的目錄C:\Program Files\Git\mingw64\libexec\git-core下會有:

git-credential-cache.exe
git-credential-cache--daemon.exe
git-credential-manager-core.exe
git-credential-store.exe
git-credential-wincred.exe

查看git使用的憑證管理工具:

> git config --list

...省略不相關的配置
credential.helper=manager-core
credential.helper=store 
...省略不相關的配置

Git 甚至允許你配置多個輔助工具。 當查找特定服務器的憑證時,Git 會按順序查詢,并且在找到第一個回答時停止查詢。 當保存憑證時,Git 會將用戶名和密碼發(fā)送給?所有?配置列表中的輔助工具,它們會按自己的方式處理用戶名和密碼。

注意,這里的manager-corestore分別對應目錄C:\Program Files\Git\mingw64\libexec\git-core下的git-credential-manager-core.exegit-credential-store.exe。當然你也可以自己寫一個輔助工具,放在這個目錄里。例如你開發(fā)一個:foo的工具,你設置時使用git config --global credential.helper foo,你的文件名稱應該為:git-credential-foo.exe

git-credential-manager-core.exe是微軟開發(fā)的工具,它把憑證保存在了windows的憑證管理中。控制面板\用戶帳戶\憑證管理\管理windows憑證中。所以有時有的人把 git config中的insteadof已經(jīng)刪除了,但還可以正常拉取。是因為系統(tǒng)已經(jīng)把憑證保存起來了,我們拉取代碼的時候git自動從憑證管理功能中獲取到憑證,再拼接上進行請求。

3. go mod cache

go get 拉取代碼時后在$GOPATH/pkg/下生成緩存,而且會有2級緩存。

第1級緩存:首先會在$GOPATH/pkg/mod/cache目錄中下載所需要的包,以壓縮所格式保存。

第2級緩存:在$GOPATH/pkg/mod中解壓cache中的包,放在與cache目錄同級。

這樣我們 go get 時會先檢查第2級緩存,如果不存在,再去檢查第1級緩存,如果都不存在再連網(wǎng)去倉庫拉取包,并生成緩存。

可以手動刪除緩存或通過命令(命令會將整個$GOPATH/pkg/mod目錄刪除):

go clean -modcache

所以有時在認證后拉取的包緩存在了本地,即使認證的access token或密碼修改了,再go get或go mod tidy時也可以成功使用包,也可能是使用了之前的緩存。

參考文章

Git - 憑證存儲

Git 憑據(jù)保存、如何修改_git憑據(jù)怎么設置_薛瑄的博客-CSDN博客

私有化倉庫的 GO 模塊使用實踐 - 知乎

Go Modules Reference - The Go Programming Language

點擊查看更多文章

更新精彩文章請關注微信公眾號:大胡幾哥哥文章來源地址http://www.zghlxwxcb.cn/news/detail-792975.html

到了這里,關于一篇文章徹底弄懂Golang私有倉庫配置問題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 一篇文章弄懂Oracle和PostgreSQL的Database Link

    ?? 文章目標:本篇介紹Oracle和PostgreSQL的Database Link ?? 一篇文章弄懂Oracle和PostgreSQL的Database Link ? 創(chuàng)作者:Jay… ?? 個人主頁:Jay的個人主頁 ?? 展望:若本篇講解內容幫助到您,請幫忙點個贊吧,再點點您的小手關注下,您的支持是我繼續(xù)寫作的最大動力,謝謝?? 作為回

    2024年02月06日
    瀏覽(20)
  • FPGA入門系列(1)產(chǎn)品選型(一篇文章弄懂FPGA不同系列)

    FPGA入門系列(1)產(chǎn)品選型(一篇文章弄懂FPGA不同系列)

    Xilin的FPGA芯片可以分為多個系列,我們常見的7系列、UltraScale、UltraScale+。 根據(jù)不同的工藝可以劃分為45nm、28nm、20nm、16nm,可以劃分為: 特別的在這些系列之外,還有ZYQN。這個系列主要的特點是在具備FPGA功能外,還額外封裝了一個處理器,比較的常見的是ZYNQ-7000系列,便宜

    2024年04月14日
    瀏覽(19)
  • 一篇文章讓你弄懂分布式一致性協(xié)議Paxos

    Paxos算法由Leslie Lamport在1990年提出,它是少數(shù)在工程實踐中被證實的強一致性、高可用、去中心的分布式協(xié)議。Paxos協(xié)議用于在多個副本之間在有限時間內對某個決議達成共識。Paxos協(xié)議運行在允許消息重復、丟失、延遲或亂序,但沒有拜占庭式錯誤的網(wǎng)絡環(huán)境中,它利用“大

    2024年02月09日
    瀏覽(19)
  • 一篇文章徹底清楚shellcode(精品)

    一篇文章徹底清楚shellcode(精品)

    1.沒開沙箱(此時我們可以系統(tǒng)調用get shell) (一)32位程序系統(tǒng)調用 32位程序有別于64位程序,32位通過棧傳參,我們常用的寄存器有4個數(shù)據(jù)寄存器(eax,ebx,ecx,edx),2個變址寄存器(esi,edi),2個指針寄存器(esp,ebp). 下邊我們就來看一種系統(tǒng)調用方式及其構造: 執(zhí)行上述shellcode即可g

    2024年02月09日
    瀏覽(19)
  • 一篇文章,帶你徹底掌握接口測試!

    一、什么是接口測試? 所謂接口,是指同一個系統(tǒng)中模塊與模塊間的數(shù)據(jù)傳遞接口、前后端交互、跨系統(tǒng)跨平臺跨數(shù)據(jù)庫的對接。而接口測試,則是通過接口的不同情況下的輸入,去對比輸出,看看是否滿足接口規(guī)范所規(guī)定的功能、安全以及性能方面的要求。 二、為什么要

    2024年02月10日
    瀏覽(34)
  • 一篇文章徹底理解自定義View

    目錄 一.View的基礎? 1.view的基礎概念 2.view的位置和事件event幾種表示法 3.view的滑動

    2024年02月01日
    瀏覽(22)
  • 讀這篇文章讓你徹底了解Redis

    讀這篇文章讓你徹底了解Redis

    你好,我是Redis,一個叫Antirez的男人把我?guī)У搅诉@個世界上。 說起我的誕生,跟關系數(shù)據(jù)庫MySQL還挺有淵源的。 在我還沒來到這個世界上的時候,MySQL過的很辛苦,互聯(lián)網(wǎng)發(fā)展的越來越快,它容納的數(shù)據(jù)也越來越多,用戶請求也隨之暴漲,而每一個用戶請求都變成了對它的一

    2024年02月04日
    瀏覽(28)
  • Unity/C#------委托與事件(一篇文章徹底搞懂...)

    Unity/C#------委托與事件(一篇文章徹底搞懂...)

    ? ? ? ? 所有的代碼語言創(chuàng)造者母語都是英語,我們從英語翻譯到中文的過程中難免會存在一些不太能還原本意的詞,比如我之前一直不理解構造函數(shù)和析構函數(shù),只知道這倆貨作用相反,直到我看到了它的英文意思,Construstor/Distructor,我才徹底理解了他們的作用。 ? ? ?

    2024年02月06日
    瀏覽(22)
  • 假期算法提升(一篇文章帶你徹底學會雙指針)

    假期算法提升(一篇文章帶你徹底學會雙指針)

    呀哈嘍,我是結衣。 對于要參加程序設計比賽的人來說,算法永遠都是一道繞不開的坎,你必須的去了解他才可以更好的去解決問題。非形式地說,算法就是任何良地計算過程,我們可以把算法看作是用于求良說明地計算問題地工具。那么今天我們學到的就是其中最基礎的一

    2024年02月19日
    瀏覽(26)
  • Hive詳解(一篇文章讓你徹底學會Hive)

    Hive詳解(一篇文章讓你徹底學會Hive)

    概述 Hive是由Facebook(臉書)開發(fā)的后來貢獻給了Apache的一套數(shù)據(jù)倉庫管理工具,針對海量的結構化數(shù)據(jù)提供了讀、寫和管理的功能。 圖-1 Hive圖標 Hive本身是基于Hadoop,提供了類SQL(Hive Query Language,簡稱為HQL)語言來操作HDFS上的數(shù)據(jù),而底層實際上是將用戶書寫的SQL轉化為了MapR

    2024年04月12日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包