• ubuntu设置 Git 代理(http/git/ssh)


    转载请标明转载自:https://blog.csdn.net/chenbb8


    使用git拉取github之类的网站里的远程仓库的时候,因为网络问题,访问速度不稳定,因此需要特殊设置以达到加速clone和push的效果。
    git的远程仓库有三种clone方式,不同的连接方式对应不同的设置方法,设错的话就会导致越过代理直接连接,网上的一些教程往往没有说清楚这里面的差别,如下列出几个典型的网址和分类

    #http协议
    git clone https://github.com/chenbb8/efsm.git
    #git协议   (github不支持git://格式,所以这里展示openwrt.org的git协议远程仓库)
    git clone git://git.openwrt.org/openwrt/openwrt.git
    #ssh协议
    git clone git@github.com:chenbb8/efsm.git
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注1:对于已经clone下来的本地仓库,可以使用git remote -v查看远程仓库的地址。
    注2:另外还有一种方法是在需要加速的命令前加proxychains,不需要繁琐的设置,具体自行百度,这里就不展开了。

    http协议远程仓库设置代理


    http协议远程仓库的代理设置比较简单,只需要执行下面的代码(经测试,无需像别的教程那样,分别设置http.proxy和https.proxy)

    #如果使用的是http代理 
    git config --global http.proxy http://代理地址:代理端口
    #如果使用的是socks5代理
    git config --global http.proxy socks5://代理地址:代理端口
    
    • 1
    • 2
    • 3
    • 4

    以上设置产生的是全局代理,也可以针对域名设置代理,以github.com为例:

    #如果使用的是http代理 
    git config --global http.https://github.com.proxy http://代理地址:代理端口
    #如果使用的是socks5代理
    git config --global http.https://github.com.proxy socks5://代理地址:代理端口
    
    • 1
    • 2
    • 3
    • 4
    相关设置可以在~/.gitconfig文件中观察到,可以参考当前设置前后的格式,
    直接在~/.gitconfig文件中,增加或者删除对应的配置。后面的取消代理脚本用的就是直接修改~/.gitconfig的方法。
    
    • 1
    • 2

    取消http协议远程仓库代理


    执行如下代码

    git config --global --unset http.proxy
    
    • 1

    如果是针对域名设置代理,以github.com为例,则执行

    git config --global --unset http.https://github.com.proxy
    
    • 1

    为git协议远程仓库设置代理


    github不支持git://格式,所以这次展示openwrt.org的git协议远程仓库:
    设置git协议的代理,需要安装connect-proxy

    sudo apt-get update
    sudo apt-get install connect-proxy
    
    • 1
    • 2

    然后在桌面上新建文件gitproxy.sh
    在里面输入:

    #!/bin/bash
    #-S 为 socks, -H 为 HTTP
    connect -S 代理地址:代理端口 $@
    
    • 1
    • 2
    • 3

    接着给文件增加执行属性,并它拷贝到用户路径中,以便可以被git调用

    chmod +x gitproxy.sh
    sudo cp gitproxy.sh /usr/bin/
    
    • 1
    • 2

    接着将gitproxy.sh关联到git中:

    git config --global core.gitproxy gitproxy.sh
    
    • 1

    以上设置产生的是全局代理,也可以针对域名设置代理,以openwrt.org为例,则执行

    git config --global --add core.gitproxy 'gitproxy.sh for openwrt.org'
    
    • 1
    相关设置可以在~/.gitconfig文件中观察到,可以参考当前设置前后的格式,
    直接在~/.gitconfig文件中,增加或者删除对应的配置。后面的取消代理脚本用的就是直接修改~/.gitconfig的方法。
    
    • 1
    • 2

    取消git协议远程仓库代理


    执行如下代码

    git config --global --unset core.gitproxy
    
    • 1

    为ssh协议远程仓库设置代理


    设置ssh协议的代理,需要安装connect-proxy,参考前面章节。
    访问ssh协议远程仓库,相关代理并不通过git来设置,而是设置本地ssh的相关文件
    首先在~/.ssh/路径下创建名为config的空文件,然后粘贴下面的内容进去:

    Host github.com
    #-S 为 socks, -H 为 HTTP
    ProxyCommand connect -S 代理地址:代理端口 %h %p
    
    • 1
    • 2
    • 3

    以上设置产生的是全局代理,也可以针对域名设置代理,以github.com为例,则执行

    Host github.com
    #-S 为 socks, -H 为 HTTP
    ProxyCommand connect -S 代理地址:代理端口 %h %p
    
    • 1
    • 2
    • 3
    因为本人电脑中的connect程序连接socks5代理的时候,每次都要提示输入密码,
    因此后面的设置代理脚本,通过gitproxyssh.sh自动为代理输入密码。
    
    • 1
    • 2

    取消ssh协议远程仓库代理


    执行如下代码

    git config --global --unset core.gitproxy
    
    • 1

    注:如果针对多个域名设置代理,可能会报错:warning: core.gitproxy has multiple values
    可以通过以下指令直接删除地址,来达成目的:

    sed -i '/\[core]/d' ~/.gitconfig
    sed -i '/gitproxy =/d' ~/.gitconfig
    
    • 1
    • 2
    设置和取消代理的脚本(socks5)

    设置代理脚本如下所示,用户需要修改的是:代表代理IP地址的VPN_IP和代表代理端口的VPN_PORT,还有代表需要加速的远程仓库地址数组GIT_ADDR,如果代理设置了密码,那么还要修改变量VPN_POSSWORD的值。

    #!/bin/bash
    VPN_IP=192.168.0.123
    VPN_PORT=2022
    VPN=${VPN_IP}:${VPN_PORT}
    #代理的连接密码,默认是空密码
    VPN_POSSWORD=
    GIT_ADDR=(
    #一行一个地址
    github.com
    openwrt.org
    )
    
    #设置HTTP代理
    for addr in ${GIT_ADDR[@]}; do
    #	echo http-- $addr
    	git config --global http.https://$addr.proxy socks5://${VPN}
    done
    
    
    #设置GIT代理
    if [ ! -e /usr/bin/gitproxy.sh ] ; then
    	echo 666
    	touch /tmp/gitproxy.sh
    	chmod a+x /tmp/gitproxy.sh
    	sudo cp /tmp/gitproxy.sh /usr/bin/
    fi
    #编写脚本/usr/bin/gitproxy.sh
    echo "#!/bin/sh" | sudo tee /usr/bin/gitproxy.sh
    #设置代理的密码,以免每次都要输入代理的密码(可选)
    echo "export SOCKS5_PASSWORD=${VPN_POSSWORD}" | sudo tee -a /usr/bin/gitproxy.sh
    echo "connect -S $VPN \$@" | sudo tee -a /usr/bin/gitproxy.sh
    
    #git config --global core.gitproxy gitproxy.sh
    #git config --global --unset core.gitproxy这个指令在core.gitporxy下有多个值的时候会失效,因此直接操作~/.gitconfig
    sed -i '/gitproxy =/d' ~/.gitconfig
    for addr in ${GIT_ADDR[@]}; do
    #	echo core-- $addr
    	git config --global --add core.gitproxy "gitproxy.sh for $addr"
    done
    
    
    #设置SSH代理
    rm -f ~/.ssh/config
    touch ~/.ssh/config
    for addr in ${GIT_ADDR[@]}; do
    	echo ssh-- $addr
    	echo Host $addr >> ~/.ssh/config
    	echo "ProxyCommand gitproxyssh.sh -S $VPN  %h %p" >> ~/.ssh/config
    done
    #编写脚本/usr/bin/gitproxyssh.sh
    if [ ! -e /usr/bin/gitproxyssh.sh ] ; then
            echo 888
            touch /tmp/gitproxyssh.sh
            chmod a+x /tmp/gitproxyssh.sh
            sudo cp /tmp/gitproxyssh.sh /usr/bin/
    fi
    echo "#!/bin/sh" | sudo tee /usr/bin/gitproxyssh.sh
    #设置代理的密码,以免每次都要输入代理的密码(可选)
    echo "export SOCKS5_PASSWORD=${VPN_POSSWORD}" | sudo tee -a /usr/bin/gitproxyssh.sh
    echo "connect \$@" | sudo tee -a /usr/bin/gitproxyssh.sh
    
    #打印git的设置信息
    git config -l
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    取消代理

    #!/bin/bash
    
    [ -e /usr/bin/gitproxy.sh ] && sudo rm /usr/bin/gitproxy.sh
    [ -e /usr/bin/gitproxyssh.sh ] && sudo rm /usr/bin/gitproxyssh.sh
    [ -e ~/.ssh/config ] && sudo rm ~/.ssh/config
    
    #git config --global --unset http.proxy
    #git config --global --unset core.gitproxy
    
    #删除~/.gitconfig中的[xxx]项,--unset只会删除值不会删除项
    #并且暂时没找到git的--unset命令匹配全部仓库地址的办法
    sed -i '/\[http/,+1d' ~/.gitconfig
    sed -i '/\[core\]/d' ~/.gitconfig
    sed -i '/gitproxy =/d' ~/.gitconfig
    
    
    #打印git的设置信息
    git config -l --global
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    参考
    https://git-scm.com/docs/git-config
    https://zhuanlan.zhihu.com/p/481574024
    https://blog.csdn.net/dx4640396/article/details/121808602

  • 相关阅读:
    使用 Piral 创建微前端
    vim编辑器使用
    jquery的基本使用
    高并发高可用之MongoDB
    ZJCA数字证书用户责任书
    java计算机毕业设计进出口食品安全信息管理系统源码+mysql数据库+系统+lw文档+部署
    2023 ARM
    HTML5期末考核大作业、HTML个人主页界面设计源码
    【C#】自动升级工具
    分析 java.util.LinkedHashMap
  • 原文地址:https://blog.csdn.net/chenbb8/article/details/127798751