SVN中,使用TortoiseSVN來進行版本控制時,設置代理非常簡單,只需要在設置里面添加代理的信息即可。而 git 在GUI(v0.17.GITGUI)中卻無法找到類似的設置,只能求助 git bash 來設置。
Git支持四種協議 1 ,而除本地傳輸外,還有:git://, ssh://, 基於HTTP協議,這些協議又被分為啞協議(HTTP協議)和智能傳輸協議。對於這些協議,要使用代理的設置也有些差異:
- 使用
git協議時,設置代理需要配置core.gitproxy - 使用
HTTP協議時,設置代理需要配置http.proxy - 而是用
ssh協議時,代理需要配置ssh的ProxyCommand參數
由於個人需求僅僅是HTTP的代理(相對來說,HTTP有比較好的通適性,Windows配置git/ssh比較棘手),設置的時候,只需要針對單個設置 http.proxy 即可,在需要使用代理的項目下面使用 git bash 如下命令進行設置 ——你的Uri和port可能和我的不同,你懂的。:
git config http.proxy http://127.0.0.1:8088 # 也可以是uri:port形式
這個是不需要鑒權的代理設置,如果需要鑒權,可能需要添加用戶名密碼信息:
git config http.proxy http://username:password@127.0.0.1:8088
如果git的所有項目都需要啟用代理,那么可以直接啟用全局設置:
git config --global http.proxy http://127.0.0.1:8088
為了確認是否已經設置成功,可以使用 --get 來獲取:
git config --get --global http.proxy
這樣可以看到你設置在global的 http.proxy 值。
需要修改的時候,再次按照上面的方法設置即可,git默認會覆蓋原有的配置值。
當我們的網絡出現變更時,可能需要刪除掉原有的代理配置,此時需要使用 --unset 來進行配置:
git config --global --unset http.proxy
在命令之后,指定位置的設置值將會被清空,你可以再次使用 --get 來查看具體的設置情況。
如果使用了HTTPS,肯呢個會碰到HTTPS 證書錯誤的情況,比如提示: SSL certificate problem 。。。,此時,可以嘗試將 sslVerify 設置為 false :
git config --global http.sslVerify false
恩,到此,可以試試git來獲取/更改項目了,此時,項目應該是使用代理來進行通訊的。
后記:
- 如果非必要,一般不使用
--global的方式來設置代理,畢竟代理有的時候訪問一些項目比直接訪問還慢,特別是當代理在國外,項目源在國內的時候,按需使用才是王道。 - 不要多次使用不同的參數來設置代理,一般使用文中兩種方式酌情選用即可,
--global,--system,--local各級設置后,可能會給自己帶來不必要的麻煩。git默認是先到git Repository的配置文件中查找配置文件,如果沒有才會到--global設置的文件中查找,因此,單個項目文件中的設置會覆蓋--global的設置。 - 使用
--global來配置的信息保存在當前用戶的根目錄下的.config文件中,而倉庫中的配置保存在項目倉庫的根目錄下的.git/config文件中。 - 如果是Linux的用戶,再使用
git/ssh協議時,根據網上的說法,需要使用 connect工具來做代理的轉換。—— 本人Linux下的暫時沒有配置git使用代理,暫時無法驗證,摘錄方法如下:
GIT協議配置:安裝完畢
connect之后,你可以在特定的目錄中建立一個socks5_proxy_wrapper(或其他的文件名亦可),然后文件內容改為:#!/bin/sh connect -S 127.0.0.1:8088 "$@"而后即可以配置git了,設置
gitproxy:git config core.gitproxy /path/to/socks5_proxy_wrapper # 路徑要改抑或
export GIT_PROXY_COMMAND:export GIT_PROXY_COMMAND="/path/to/socks5_proxy_wrapper"SSH協議配置,同樣需要建立一個文件,假設命名為:
socks5_proxy_ssh,文件內容為:#!/bin/sh ssh -o ProxyCommand="/path/to/socks5_proxy_wrapper %h %p" "$@"配置git使用該文件:
export GIT_SSH="/path/to/socks5_proxy_ssh"亦可配置"
~/.ssh/config"中的ProxyCommand。HTTP協議配置,這里直接使用
http.proxy設置成socks5即可:git config http.proxy socks5://127.0.0.1:8088如果要全部使用HTTP代理,可以將上面的
socks5_proxy_wrapper文件設置為:#!/bin/sh connect -H 192.168.1.100:8080 "$@"其他保持不變即可。而
http.proxy設置同本文設置即可.
