golang 專案引入私有倉庫包

changfan發表於2024-09-22

場景:

當你多個專案,都需要使用一個或者多個方法,那麼可以將公共方法,抽成一個包,進行管理(類似Log模組等)。這時候可以將你的包上傳到私有的倉庫,其他專案引入該包即可。下面來介紹下,如何引用私有倉庫的包。

1. 建立一個新的 Git 標籤

假設你已經在你的私有 GitLab 倉庫目錄中,並且你已經提交了所有的更改(執行了 git addgit commit)。現在你可以透過如下命令建立一個新的標籤。

git tag v0.1.0

如果你想要附加註釋到該標籤,可以使用:

git tag -a v0.1.0 -m "Initial release"

2. 推送標籤到 GitLab:

建立標籤之後,需要將其推送到遠端倉庫:

git push origin v0.1.0
這樣標籤 v0.1.0 就會被推送到遠端倉庫,你的模組版本也就設定好了。

3. 在 go.mod 檔案中使用這個版本號

在你需要呼叫這個私有模組的專案中,更新 go.mod 檔案,指向這個特定的版本號。這可以透過 go get 命令自動完成:

go get gitlab.com/yourusername/yourrepository@v0.1.0

或者手動編輯 go.mod 檔案:

module your-other-project

go 1.18

require (
    gitlab.com/yourusername/yourrepository v0.1.0
)

在這裡需要注意,gitlab.com/yourusername/yourrepository這裡的包名一定需要和依賴的包名保持一致

4. 更新依賴

go mod tidy

5.注意事項

5.1 訪問GitLab倉庫認證失敗

fatal: could not read Username for 'https://gitlab.xxxx.cn': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.

出現此錯誤通常是在訪問私有 GitLab 倉庫時認證失敗。要解決這個問題,可以透過以下方法來確保 go get 能夠正確地透過 HTTPS 認證訪問私有倉庫。

這裡介紹一種設定環境變數的方法

1. 建立一個 Shell 指令碼檔案來返回訪問令牌:

echo 'echo <your_personal_access_token>' > /path/to/git-askpass.sh
chmod +x /path/to/git-askpass.sh
擴充如何獲得access_token:
  1. 登入到你的 GitLab 賬戶。
  2. 點選右上角的使用者頭像,然後選擇 "Settings"。
  3. 在左側導航欄中選擇 "Access Tokens"。
  4. 輸入 token 名稱,選擇相應的作用域(至少需要 read_repository 許可權)。
  5. 點選 "Create personal access token"。

2. 設定環境變數
export GIT_ASKPASS='/path/to/git-askpass.sh'
export GIT_TERMINAL_PROMPT=0

3.配置 GOPRIVATE

如果尚未配置,確保設定 GOPRIVATE 環境變數來指示 Go 不要在 go get 期間使用 Go module proxy。

export GOPRIVATE=gitlab.com/yourusername/*

透過這種方式,GIT_ASKPASS 指令碼會在 Git 認證時返回訪問令牌,從而避免手動輸入使用者名稱和密碼。

相關文章