转载请标明转载自: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 [email protected]:chenbb8/efsm.git
注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://代理地址:代理端口
以上设置产生的是全局代理,也可以针对域名设置代理,以github.com为例:
#如果使用的是http代理 git config --global http.https://github.com.proxy http://代理地址:代理端口
#如果使用的是socks5代理git config --global http.https://github.com.proxy socks5://代理地址:代理端口
相关设置可以在~/.gitconfig文件中观察到,可以参考当前设置前后的格式,
直接在~/.gitconfig文件中,增加或者删除对应的配置。后面的取消代理脚本用的就是直接修改~/.gitconfig的方法。
取消http协议远程仓库代理
执行如下代码
git config --global--unset http.proxy
如果是针对域名设置代理,以github.com为例,则执行
git config --global--unset http.https://github.com.proxy
为git协议远程仓库设置代理
github不支持git://格式,所以这次展示openwrt.org的git协议远程仓库:
设置git协议的代理,需要安装connect-proxy
sudoapt-get update
sudoapt-getinstall connect-proxy
然后在桌面上新建文件gitproxy.sh
在里面输入:
#!/bin/bash#-S 为 socks, -H 为 HTTP
connect -S 代理地址:代理端口 $@
接着给文件增加执行属性,并它拷贝到用户路径中,以便可以被git调用
chmod +x gitproxy.sh
sudocp gitproxy.sh /usr/bin/
接着将gitproxy.sh关联到git中:
git config --global core.gitproxy gitproxy.sh
以上设置产生的是全局代理,也可以针对域名设置代理,以openwrt.org为例,则执行
git config --global--add core.gitproxy 'gitproxy.sh for openwrt.org'
相关设置可以在~/.gitconfig文件中观察到,可以参考当前设置前后的格式,
直接在~/.gitconfig文件中,增加或者删除对应的配置。后面的取消代理脚本用的就是直接修改~/.gitconfig的方法。
取消git协议远程仓库代理
执行如下代码
git config --global--unset core.gitproxy
为ssh协议远程仓库设置代理
设置ssh协议的代理,需要安装connect-proxy,参考前面章节。
访问ssh协议远程仓库,相关代理并不通过git来设置,而是设置本地ssh的相关文件
首先在~/.ssh/路径下创建名为config的空文件,然后粘贴下面的内容进去:
Host github.com
#-S 为 socks, -H 为 HTTP
ProxyCommand connect -S 代理地址:代理端口 %h %p
以上设置产生的是全局代理,也可以针对域名设置代理,以github.com为例,则执行
Host github.com
#-S 为 socks, -H 为 HTTP
ProxyCommand connect -S 代理地址:代理端口 %h %p
因为本人电脑中的connect程序连接socks5代理的时候,每次都要提示输入密码,
因此后面的设置代理脚本,通过gitproxyssh.sh自动为代理输入密码。
取消ssh协议远程仓库代理
执行如下代码
git config --global--unset core.gitproxy
注:如果针对多个域名设置代理,可能会报错:warning: core.gitproxy has multiple values
可以通过以下指令直接删除地址,来达成目的:
sed-i'/\[core]/d' ~/.gitconfig
sed-i'/gitproxy =/d' ~/.gitconfig
设置和取消代理的脚本(socks5)
设置代理脚本如下所示,用户需要修改的是:代表代理IP地址的VPN_IP和代表代理端口的VPN_PORT,还有代表需要加速的远程仓库地址数组GIT_ADDR,如果代理设置了密码,那么还要修改变量VPN_POSSWORD的值。
#!/bin/bashVPN_IP=192.168.0.123
VPN_PORT=2022VPN=${VPN_IP}:${VPN_PORT}#代理的连接密码,默认是空密码VPN_POSSWORD=GIT_ADDR=(#一行一个地址
github.com
openwrt.org
)#设置HTTP代理foraddrin${GIT_ADDR[@]};do# echo http-- $addrgit config --global http.https://$addr.proxy socks5://${VPN}done#设置GIT代理if[!-e /usr/bin/gitproxy.sh ];thenecho666touch /tmp/gitproxy.sh
chmod a+x /tmp/gitproxy.sh
sudocp /tmp/gitproxy.sh /usr/bin/
fi#编写脚本/usr/bin/gitproxy.shecho"#!/bin/sh"|sudotee /usr/bin/gitproxy.sh
#设置代理的密码,以免每次都要输入代理的密码(可选)echo"export SOCKS5_PASSWORD=${VPN_POSSWORD}"|sudotee-a /usr/bin/gitproxy.sh
echo"connect -S $VPN \$@"|sudotee-a /usr/bin/gitproxy.sh
#git config --global core.gitproxy gitproxy.sh#git config --global --unset core.gitproxy这个指令在core.gitporxy下有多个值的时候会失效,因此直接操作~/.gitconfigsed-i'/gitproxy =/d' ~/.gitconfig
foraddrin${GIT_ADDR[@]};do# echo core-- $addrgit config --global--add core.gitproxy "gitproxy.sh for $addr"done#设置SSH代理rm-f ~/.ssh/config
touch ~/.ssh/config
foraddrin${GIT_ADDR[@]};doecho ssh-- $addrecho Host $addr>> ~/.ssh/config
echo"ProxyCommand gitproxyssh.sh -S $VPN %h %p">> ~/.ssh/config
done#编写脚本/usr/bin/gitproxyssh.shif[!-e /usr/bin/gitproxyssh.sh ];thenecho888touch /tmp/gitproxyssh.sh
chmod a+x /tmp/gitproxyssh.sh
sudocp /tmp/gitproxyssh.sh /usr/bin/
fiecho"#!/bin/sh"|sudotee /usr/bin/gitproxyssh.sh
#设置代理的密码,以免每次都要输入代理的密码(可选)echo"export SOCKS5_PASSWORD=${VPN_POSSWORD}"|sudotee-a /usr/bin/gitproxyssh.sh
echo"connect \$@"|sudotee-a /usr/bin/gitproxyssh.sh
#打印git的设置信息git config -l
取消代理
#!/bin/bash[-e /usr/bin/gitproxy.sh ]&&sudorm /usr/bin/gitproxy.sh
[-e /usr/bin/gitproxyssh.sh ]&&sudorm /usr/bin/gitproxyssh.sh
[-e ~/.ssh/config ]&&sudorm ~/.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
参考
https://git-scm.com/docs/git-config
https://zhuanlan.zhihu.com/p/481574024
https://blog.csdn.net/dx4640396/article/details/121808602
版权归原作者 棒子陈 所有, 如有侵权,请联系我们删除。