如何為 Git 設定代理?
巴扎黑
巴扎黑 2017-05-02 09:33:57
0
12
1795

最近從 Bitbucket經常訪問不了,Github拖碼的速度也抽風,什麼原因大家都知道。
所以,最好的方法就是給Git設定代理了,我希望能指定部分倉庫走代理方式,不知該如何設定?

補充另一種情況

本地環境下,本人設定了ssh代理,透過SOCKS走127.0.0.1:7070實現,如果在本地ssh代理開啟的情況下,是不是又有另外的方法?

巴扎黑
巴扎黑

全部回覆(12)
滿天的星座

Git 目前支援的三種協定 git://ssh://http://,其代理配置各不相同:core.gitproxy 用于 git:// 协议,http.proxy 用于 http:// 协议,ssh:// 协议的代理需要配置 ssh 的 ProxyCommand 參數。

對於所有的協定全部使用 SSH 隧道進行代理

GIT 協定的配置

建立 /path/to/socks5proxywrapper 文件,使用 https://bitbucket.org/gotoh/connect 工具進行代理的轉換,各發行版一般打包為 proxy-connect 或 connect-proxy。

#!/bin/sh
connect -S 127.0.0.1:7070 "$@"

配置 git

[core]
        gitproxy = /path/to/socks5proxywrapper

export GIT_PROXY_COMMAND="/path/to/socks5proxywrapper"

SSH 協定的配置

建立 /path/to/soks5proxyssh 檔案

#!/bin/sh
ssh -o ProxyCommand="/path/to/socks5proxywrapper %h %p" "$@"

配置 git 使用該 wrapper

export GIT_SSH="/path/to/socks5proxyssh“

當然也可以直接設定 ~/.ssh/configProxyCommand

HTTP 協定的設定

[http]
        #这里是因为 Git 使用 libcurl 提供 http 支持
        proxy = socks5://127.0.0.1:7070

所有協定全部使用 http 代理

在前一部分的基礎上, /path/to/socks5proxywrapper 文件改為

#!/bin/sh
connect -H 192.168.1.100:8080 "$@"

HTTP 協定配置

[http]
    proxy = http://192.168.1.100:8080

針對網域啟用代理

gitproxy 參數提供 * for * 结构,具体看 man git-config 的 core.gitproxy 部分。

小葫芦

可以為該倉庫設定 http.proxy 或 core.gitproxy

git config http.proxy http://user:pwd@server.com:port
git config core.gitproxy '"proxy-command" for example.com'

http://www.kernel.org/pub/software/sc...

过去多啦不再A梦

給git設定代理可以用yanyaoer的方法。
至於你說的ssh+pac+socks的代理,是跟yanyaoer說的git代理不衝突的。
socks代理程式是一個電路級的底層代理,而git config中設定的代理是應用級的。

舉個例子,你的pac裡設定了 github.com 走 socks 127.0.0.1:7070 ;而git config裡有為github.com設定了走 proxy.server.com 的代理。
那麼這個時候,你進行git操作,所有的網路請求走到socks那一層的時候,已經是proxy.server.com了,自然就不受影響,會直接出去。

習慣沉默

tsocks - http://tsocks.sourceforge.net/

$ tsocks git clone git@github.com:xxx/xxx.git

淡淡烟草味

從bitbucket克隆用ssh協定的話可以用所有ssh的代理使用方式

例如如果是http代理或socks代理,可以使用 http://bent.latency.net/bent/git/goto... 這個小程式做主機的ProxyCommand

如果是你說的有某個中轉伺服器的話,可以用遠端主機上的ncncProxyCommand http://www.undeadly.org/cgi?action=ar...

關於你說的區分流量,可以在~/.ssh/config裡進行區別設定。例如我之前用的配置

Host bitbucket.org
    ProxyCommand ~/.ssh/connect -H 192.168.1.106:3128 %h 22

這樣git clone ssh://git@bitbucket.org/XXXX時會自動呼叫這裡定義的git clone ssh://git@bitbucket.org/XXXX时会自动调用这里定义的ProxyCommand

phpcn_u1582

github ssh proxy | github ssh 協定代理配置

配置一個 proxy-wrapper 腳本

bash
cat > $HOME/bin/proxy-wrapper
#!/bin/bash
nc -x127.0.0.1:7080 -X5 $*

給它增加一個可執行權限

bash
$ chmod +x $HOME/bin/proxy-wrapper

配置 .ssh/config , 對 github.com 設定一個代理命令

bash
Host github github.com
    Hostname github.com
    User git
    ProxyCommand $HOME/bin/proxy-wrapper '%h %p'

必須全部走ssh協定

bash
$ git clone git@github.com:jjrdn/node-open.git

git 協定請參考 [Using GIT through a SOCKS proxy](http://twopenguins.org/tips/git-throu...).

參考

  1. [如何為 Git 設定代理? ](/q/10100000001...)
  2. [Using GIT through a SOCKS proxy](http://twopenguins.org/tips/git-throu...)
  3. [免費的ssh](http://milnk.com/link/10645)
滿天的星座

根據1L的答案寫了一個smart_switcher,可以自動判別並設定各種代理,基於http代理配置,特別適合office有代理、家裡無代理各種切換的情況,不過簡化到超簡單,只需設定你的網關IP和Port即可。
ReadMe在此。 。 。

smart_switcher

A auto-detect proxy switcher fot http, https, ftp, rsync, ssh, git protocols.


Overview

A smart proxy switcher wrapper, supports http, https, ftp, rsync, ftp, connc It can automatically detect your network environment and set proxy for you.

If you usually switch the network environment (maybe home with no-proxy and workplace with proxy), it may help you a lot.

Tested in zsh and bash.

Screenshot

Install

Simply source it in your .zshrc, or any shell script resource file like this:

source /path/to/smart_switcher.sh

and, make sure set your proxy_server/gateway in .smart_switcher.sh

Usage

Normally, it antomatically executes when you login in.

supports cecho, who will bring some colors for you.smart_switcher

connect is required if proxy is supported in

ssh and git. You can install it easily in path ./usr/bin/connect

刘奇

git協定連接方式使用的是ssh同伺服器通訊,設定ssh走sock5代理連接伺服器的同時也解決了git的代理問題。

1.

https://raw.githubusercontent.com/bronzeee/ssh_connect/master/connect.c

將上述程式碼使用gcc編譯並保存在環境變數目錄中同時改名connect
進入.ssh目錄新建

檔案config

Host *
    User git
    ProxyCommand $HOME/.ssh/proxy-wrapper '%h %p'

檔案 proxy-wrapper

#!/bin/bash
~/connect.exe -S http://IP:PORT $@
Peter_Zhu

上面有不少答案了。假設用程式在無狀態、無工作目錄的情況下運行git指令,利用-c参数可以在运行时重载git配置,包括关键的http.proxy

例如:

git clone -c http.proxy=http://192.168.117.131:8888  http://github.com/me/test1.git
小葫芦

最優方案是proxychains(https://github.com/haad/proxychains)。
下面命令運行程式program
$ proxychains program
它強制給定程式發起的TCP連接通過事先配置的代理。至少在Linux上,它比“SOCKS代理轉為HTTP代理”用途更廣泛。兩者互為補充,可以涵蓋所有需要代理的情境。
以Git為例,沒有proxychains的話,就必須為每個協定(http, git, ssh)依照git文檔的要求分別設定代理,過程複雜且不穩定。有了proxychains,這些都可以忘掉了!

$ sudo apt-get install proxychains
開啟/etc/proxychains.conf,註解掉下面這行(disable遠端DNS解析。有DNS污染風險。下文講如何解決enable不work的問題。)
proxy_dns
最後新增如下:
socks5 134.64.206.85 1081
$ proxychains git clone git://github.com/yuzhichang/cppdep
$ sudo proxychains apt-get update
這裡134.64.206.85:1081是SOCKS代理位置。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!