如何為 Git 設置代理


1. 連接情況總覽

如果在克隆或從遠程倉庫獲取數據時遇到很慢甚至超時的情況,那么此時可能需要配置 Git 的代理。這里講講兩種情況的代理方法:使用 HTTP/HTTPS 協議和使用 SSH 協議。

  • 如果遠程倉庫的格式像下面那樣,這種就是使用 HTTP/HTTPS 協議連接到 Git 倉庫的情況
http://github.com/cms-sw/cmssw.git
https://github.com/cms-sw/cmssw.git
  • 如果遠程倉庫的格式像下面那樣,這種就是使用 SSH 協議連接到 Git 倉庫的情況
git@github.com:cms-sw/cmssw.git
ssh://git@github.com/cms-sw/cmssw.git

2. 使用 HTTP 或 HTTPS 協議連接到 Git 倉庫的代理方法

2.1 針對所有域名的 Git 倉庫

# HTTP/HTTPS 協議,port 需與代理軟件設置的一致
git config –-global http.proxy http://127.0.0.1:port  # 注意修改 port

# SOCKS5 協議,port 需與代理軟件設置的一致
git config --global http.proxy socks5://127.0.0.1:port  # 注意修改 port

注意:

  • --glboal 選項指的是修改 Git 的全局配置文件~/.gitconfig,而非各個 Git 倉庫里的配置文件.git/config
  • port則為端口號。

2.2 針對特定域名的 Git 倉庫

# HTTP/HTTPS 協議
git config ––global http.url.proxy http://127.0.0.1:port
# 以 Github 為例
git config ––global http.https://github.com.proxy http://127.0.0.1:port

# SOCKS5 協議
git config ––global http.url.proxy socks5://127.0.0.1:port
# 以 Github 為例
git config ––global http.https://github.com.proxy socks5://127.0.0.1:port

注意:

  • url 即為需要走代理的倉庫域名,url 以 http:// 和 https:// 打頭的均用這個方法。
  • 網上很多中文教程,可能會告訴你https://打頭的 url 使用“git config –global https.https://example.com.proxy protocol://127.0.0.1:port”,這種做法其實是錯的!記住一點:Git 不認https.proxy,設置http.proxy就可以支持 https 了。
  • 如果想了解 url 的更多模式,如子域名等的情況,可參照 Git 的官方文檔 。網頁內容搜索 http. .*,即可找到相關信息。

3. 使用 SSH 協議連接到 Git 倉庫的代理方法

Git 依靠 ssh 處理連接時,為了通過代理進行連接,必須配置 ssh 本身,在 ~/.ssh/config 文件中設置 ProxyCommand 選項。Linux 和 macOS 是通過 nc 來執行 ProxyCommand 的,Windows 下則是通過 connect。

3.1 Linux 和 macOS 用戶

編輯 ~/.ssh/config 文件,給文件加上如下對應內容

# HTTP 代理
Host github.com
    User git
    ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p

解釋:

  • Host 后面 接的 github.com 是指定要走代理的倉庫域名。
  • 在 ProxyCommand 中,Linux 和 macOS 用戶用的是 nc。
  • -X 選項后面接的是 connect 的意思是 HTTPS 代理。
  • -x 選項后面加上代理地址和端口號。
  • 在調用 ProxyCommand 時,%h 和 %p 將會被自動替換為目標主機名和 SSH 命令指定的端口(%h 和 %p 不要修改,保留原樣即可)。
# SOCKS5 協議
# 兩種方式任選一個

# 第一種
Host github.com
    User git
    ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
    
# 第二種
Host github.com
    User git
    ProxyCommand nc -x 127.0.0.1:7891 %h %p

解釋:

  • Host 后面 接的 github.com 是指定要走代理的倉庫域名。
  • 在 ProxyCommand 中,Linux 和 macOS 用戶用的是 nc 。
  • 在調用 ProxyCommand 時,%h 和 %p 將會被自動替換為目標主機名和 SSH 命令指定的端口( %h 和 %p 不要修改,保留原樣即可)。
  • 如果 -X 選項后面接的是數字 5,那么指的就是 socks5 代理。
  • 當然不寫上 -X 選項也是可以的,因為在沒有指定協議的情況下,默認是使用socks5代理的。所以2 種的寫法效果一樣 ,都指的是走 socks5 代理

3.2 Windows 用戶

編輯 ~/.ssh/config 文件,給文件加上如下對應內容.windows 的 ~ 路徑一般是C:\Users\用戶名,可在 git bash 中 輸入 cd ~進入 ~目錄,再用pwd命令顯示當前路徑.

# HTTP代理
Host github.com
    User git
    ProxyCommand connect -H 127.0.0.1:7890 %h %p
    
# SOCKS5代理
Host github.com
    User git
    ProxyCommand connect -S 127.0.0.1:7891 %h %p

解釋:

  • Host 后面 接的 github.com 是指定要走代理的倉庫域名。
  • 在 ProxyCommand 中,Windows 用戶用的是 connect。
  • -H 選項的意思是 HTTP 代理
  • -S 選項指的就是 socks5 代理
  • 在調用 ProxyCommand 時,%h 和 %p 將會被自動替換為目標主機名和 SSH 命令指定的端口( %h 和 %p 不要修改,保留原樣即可)。

ssh 其他配置可以看這篇文章:如何在一個系統上同時使用 gitee 和 github

4. 參考文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM