首頁  >  問答  >  主體

如何為 Git 設定代理?

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

補充另一種情況

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

巴扎黑巴扎黑2697 天前1799

全部回覆(12)我來回復

  • 滿天的星座

    滿天的星座2017-05-02 09:35:57

    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 部分。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-02 09:35:57

    可以為該倉庫設定 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...

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-02 09:35:57

    給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了,自然就不受影響,會直接出去。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-02 09:35:57

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

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

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-02 09:35:57

    從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

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-02 09:35:57

    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)

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-02 09:35:57

    根據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

    回覆
    0
  • 怪我咯

    怪我咯2017-05-02 09:35:57

    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 $@
    

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-02 09:35:57

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

    例如:

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

    回覆
    0
  • 高洛峰

    高洛峰2017-05-02 09:35:57

    最優方案是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代理位置。

    回覆
    0
  • 取消回覆