织梦CMS - 轻松建站从此开始!

欧博ABG-会员登录-网站

一文让你了解如何为 Git 设置代理

时间:2024-06-09 13:44来源: 作者:admin 点击: 22 次
当您在克隆或从远程仓库获取数据时,很可能因为网络状况不佳遇到很慢甚至超时的情况,那么此时您可能需要配置 Git 的代理。 Git 支持的传输协议以及判断(点击展开) 在此之前需要先提一下,Git 支持的传输协议有 ssh、git、http 和 https 协议(此外,ftp 和 ftps

当您在克隆或从远程仓库获取数据时,很可能因为网络状况不佳遇到很慢甚至超时的情况,那么此时您可能需要配置 Git 的代理。

Git 支持的传输协议以及判断(点击展开)

在此之前需要先提一下,Git 支持的传输协议有 ssh、git、http 和 https 协议(此外,ftp 和 ftps 也可用于拉取,但在 中提到是低效且过时的,不建议使用)。

其原生传输协议(即 git:// URL)不做鉴权,在不安全的网络环境下应谨慎使用。

要如何分辨 Git 使用的传输协议呢?可以通过 Git URL 来进行判断:

ssh

ssh://[user@]host.xz[:port]/path/to/repo.git/ 或 [user@]host.xz:path/to/repo.git/

git

git://host.xz[:port]/path/to/repo.git/

http / https

http[s]://host.xz[:port]/path/to/repo.git/

ftp / ftps

ftp[s]://host.xz[:port]/path/to/repo.git/

连接到 Git 仓库最常用的传输协议可以分为两类:

HTTP / HTTPS 传输协议

SSH 传输协议

使用 HTTP / HTTPS 传输协议连接到 Git 仓库的 URL 实例如下:

1
2
 
https://github.com/cms-sw/cmssw.git
 

使用 SSH 传输协议连接到 Git 仓库的 URL 实例如下:

1
2
  git@github.com:cms-sw/cmssw.git
ssh://git@github.com/cms-sw/cmssw.git
 
预先准备

开始操作之前,你需要明确这些内容:

电脑已经安装了 Git(这不是废话吗,23333)。如果你是 Windows 用户,那么本文的命令你需要通过 Git Bash 来执行;如果你是 Linux 或 macOS 用户直接在终端运行即可。

知道如何用 vim 编辑文件,退出编辑的基本操作。

Git 使用 HTTP / HTTPS 传输协议的代理方法

针对 Git 使用 HTTP / HTTPS 传输协议的代理方法如下:

针对所有域名的仓库

git config --global http.proxy <protocol>://<host>:<port>

命令注解(点击展开)

--glboal 选项指的是修改 Git 的全局配置文件 ~/.gitconfig(而非各个 Git 仓库里的配置文件 .git/config)。

<protocol> 指的是代理协议,如 http,https,socks5 等。

<host> 为代理主机,如使用本地代理主机 127.0.0.1 或 localhost 等。

<port> 则为代理端口号,如 clash 使用的 7890 或 7891 等。

常见误用:git config --global https.proxy <protocol>://<host>:<port>,这一写法完全是错误的。请记住: Git 代理配置项正确写法http.proxy,并不支持 https.proxy 这一错误写法

如果想了解 <url> 的更多模式,如子域名等的情况,可参照 。

或者针对特定域名的仓库

git config --global http.<url>.proxy <protocol>://<host>:<port>

命令注解(点击展开)

--glboal 选项指的是修改 Git 的全局配置文件 ~/.gitconfig(而非各个 Git 仓库里的配置文件 .git/config)。

<url> 指的是你需要使用代理的远程仓库,该 <url> 支持 HTTP / HTTPS 传输协议的格式:

<url> 格式为 或 https://example.com

<protocol> 指的是代理协议,如 http,https,socks5 等。

<host> 为代理主机,如使用本地代理主机 127.0.0.1 或 localhost 等。

<port> 则为代理端口号,如 clash 使用的 7890 或 7891 等。

常见误用:针对 HTTPS 传输协议(即 https:// 开头)的 <url> 代理,命令写成 “git config --global https.https://github.com.proxy protocol://127.0.0.1:7890” ,这一写法完全是错的。请记住:请记住: Git 代理配置项正确写法http.<url>.proxy,并不支持 https.<url>.proxy 这一错误写法

如果想了解 <url> 的更多模式,如子域名等的情况,可参照 。

实例

针对 Git 使用 HTTP / HTTPS 传输协议的代理方法,在 Windows,Linux,macOS 上用户的操作均是一样的。

也许你光看我上面的内容还看不明白,不妨我们来看下实例部分:

此处以 Clash for Windows 为例子。如图:

image

Clash for Windows 既支持 HTTP / HTTPS 协议代理,也支持 SOCKS v5 协议代理。如果你使用其他的代理软件,你可以根据你使用的代理软件的代理协议和本地端口号参考本文修改即可。

针对所有域名的 Git 仓库

根据你的代理软件支持的代理协议选取其中一种即可:

1
  git config --global http.proxy :7890
 

注意:7890 为 Clash for Windows 的 http 代理端口。

1
  git config --global http.proxy socks5://127.0.0.1:7891
 

注意:7891 为 Clash for Windows 的 socks5 代理端口。

针对特定域名的 Git 仓库

前面我们说的是,让所有域名下的仓库都走代理的情况,但是在现实情况下我们并不想这么做。那么现在我来介绍一下针对特定域名仓库走代理的做法,此处以 GitHub 为例:

当我们在 GitHub 仓库使用 HTTPS 传输协议克隆源码时,我们往往是这么做的的:

1
  git clone https://github.com/<user>/<repository>.git
 

那么我前面命令注解所提到的 <url> 就是 https://github.com

根据你的代理软件支持的代理协议选取其中一种即可:

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

1
  git config --global http.https://github.com.proxy socks5://127.0.0.1:7891
 

Git 使用 SSH 传输协议的代理方法

在这种情况下,Git 依靠 ssh 程序处理连接; 为了通过代理进行连接,您必须配置 ssh 程序本身,在 ~/.ssh/config 文件中设置 ProxyCommand 选项,通过在 ProxyCommand 中声明,使用不同操作系统下的程序来通过代理建立连接。

macOS 是通过在 ProxyCommand 中声明 nc 程序(该 nc 程序命令为系统自带的 OpenBSD 版本的 netcat 提供)来代理的;

Linux 一样可以通过 nc 程序、但是 Linux 上 nc 程序有 2 种 netcat 版本可以提供,分为 Nmap 版和 OpenBSD 版。如果是 OpenBSD 的版本,则 nc 命令与 macOS 相同;如果是 Nmap 版本的,nc 其实是指向 ncat 程序的符号链接,则其具体命令不一样;各 Linux 发行版本下 netcat 软件包名如下表:

Linux 发行版本 / netcat 软件包名 Nmap 版 OpenBSD 版
Fedora 系列   nmap-ncat   netcat  
Debian 系列   ncat   netcat-openbsd  

Windows 下则是通过安装 Git for Windows 附带的 connect 程序。

相关 man 手册(点击展开)

1
2
3
4
5
6
7
8
9
  ProxyCommand

Specifies the command to use to connect to the server. The command string extends to the end of the line, and is executed using the user's shell ‘exec’ directive to avoid a lingering shell process.

Arguments to ProxyCommand accept the tokens described in the TOKENS section. The command can be basically anything, and should read from its standard input and write to its standard output. It should eventually connect an sshd(8) server running on some machine, or execute sshd -i somewhere. Host key management will be done using the Hostname of the host being connected (defaulting to the name typed by the user). Setting the command to none disables this option entirely. Note that CheckHostIP is not available for connects with a proxy command.

This directive is useful in conjunction with nc(1) and its proxy support. For example, the following directive would connect via an HTTP proxy at 192.0.2.0:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
 
1
2
3
4
5
6
7
  --proxy host[:port] (Specify proxy address)
Requests proxying through host:port, using the protocol specified by --proxy-type.
If no port is specified, the proxy protocol's well-known port is used (1080 for SOCKS and 3128 for HTTP). When specifying an IPv6 HTTP proxy server using the IP address rather than the hostname, the square-bracket notation (for example [2001:db8::1]:8080) MUST be used to separate the port from the IPv6 address. If the proxy requires authentication, use --proxy-auth.

--proxy-type proto (Specify proxy protocol)
In connect mode, this option requests the protocol proto to connect through the proxy host specified by --proxy. In listen mode, this option has Ncat act as a proxy server using the specified protocol.
The currently available protocols in connect mode are http (CONNECT), socks4 (SOCKSv4), and socks5 (SOCKSv5). The only server currently supported is http. If this option is not used, the default protocol is http.
 
1
2
3
4
5
  -X proxy_protocol
Use proxy_protocol when talking to the proxy server. Supported protocols are 4 (SOCKS v.4), 5 (SOCKS v.5) and connect (HTTPS proxy). If the protocol is not specified, SOCKS version 5 is used.

-x proxy_address[:port]
Connect to destination using a proxy at proxy_address and port. If port is not specified, the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS). An IPv6 address can be specified unambiguously by enclosing proxy_address in square brackets. A proxy cannot be used with any of the options -lsuU.
 

Git for Windows 默认附带的 程序 -H 和 -S 选项的内容

1
2
3
4
5
  -H option specify hostname and port number of http proxy server to relay. If port is omitted, 80 is used. You can specify this value by environment variable HTTP_PROXY and give -h option to use it.

-S option specify hostname and port number of SOCKS server to relay. Like -H option, port number can be omit and default is 1080. You can also specify this value pair by environment variable SOCKS5_SERVER and give -s option to use it.

-4 and -5 is for specifying SOCKS protocol version. It is valid only using with -s or -S. Default is -5 (protocol version 5)
 

实例

接下来的操作,请按照你的系统、选择的 netcat 的实现版本以及所使用的代理协议进行选择:

Linux(OpenBSD 版 netcat)和 macOS 用户

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上如下内容:

1
2
3
  Host github.com
User git
ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p
 

解释:

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Linux 和 macOS 用户用的是 OpenBSD 版本的 nc。

-X 选项后面接的是 connect 的意思是 HTTPS 代理。

-x 选项后面加上代理地址和端口号。

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口(%h 和 %p 不要修改,保留原样即可)。

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上如下内容,2种任选一个:

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Linux 和 macOS 用户用的是 OpenBSD 版本的 nc 。

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口( %h 和 %p 不要修改,保留原样即可)。

如果 -X 选项后面接的是数字 5,那么指的就是 socks5 代理。

当然你直接不写上 -X 选项也是可以的,因为在没有指定协议的情况下,默认是使用 socks5 代理的。所以以下 2 种的写法效果一样 ,都指的是走 socks5 代理:

①. 第一种

1
2
3
  Host github.com
User git
ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
 

②. 第二种

1
2
3
  Host github.com
User git
ProxyCommand nc -x 127.0.0.1:7891 %h %p
 

Linux(Nmap 版 netcat)用户

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上以下内容:

1
2
3
  Host github.com
User git
ProxyCommand nc --proxy 127.0.0.1:7890 --proxy-type http %h %p
 

解释:

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Linux 用户用的是 Nmap 版本的 nc 。

--proxy-type 选项后面的 http 的意思是指使用 HTTP 代理。

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口( %h 和 %p 不要修改,保留原样即可)。

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上如下内容:

1
2
3
  Host github.com
User git
ProxyCommand nc --proxy 127.0.0.1:7891 --proxy-type socks5 %h %p
 

解释:

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Linux 用户用的是 Nmap 版本的 nc 。

--proxy-type 选项后面的 socks5 的意思是指使用 socks5 代理。

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口( %h 和 %p 不要修改,保留原样即可)。

Windows 用户

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上以下内容:

1
2
3
  Host github.com
User git
ProxyCommand connect -H 127.0.0.1:7890 %h %p
 

解释:

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Windows 用户用的是 connect 。

-H 选项的意思是 HTTP 代理。

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口( %h 和 %p 不要修改,保留原样即可)。

编辑 ~/.ssh/config 文件

1
  vim ~/.ssh/config
 

给文件加上如下内容:

1
2
3
  Host github.com
User git
ProxyCommand connect -S 127.0.0.1:7891 %h %p
 

解释

Host 后面 接的 github.com 是指定要走代理的仓库域名。

在 ProxyCommand 中,Windows 用户用的是 connect。

单独的 -S 选项指的就是 socks5 代理

在调用 ProxyCommand 时,%h 和 %p 将会被自动替换为目标主机名SSH 命令指定的端口( %h 和 %p 不要修改,保留原样即可)。

如何取消 Git 和 ssh 的代理

这里就不多说了,说了那么多,我们无非就是修改了 2 个文件,即 ~/.gitconfig 和 ~/.ssh/config ,删除注释我们增加的相应内容(在相应行的开头加上 # 即可)即可完成取消代理。

参考链接

Git - git-config Documentation

Configure Git to use a proxy

Tutorial: how to use git through a proxy

ssh_config(5) - OpenBSD manual pages

ncat(1) — Linux manual page

nc(1) - OpenBSD manual pages

How can I use SSH with a SOCKS 5 proxy?

Git 基础——代理

SSH via HTTP proxy in OSX

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-10-30 15:10 最后登录:2024-10-30 15:10
栏目列表
推荐内容
  • 动静态IP代理服务商【在线免费试用】

    天启HTTP专注企业级优质高匿IP代理服务,提供https代理、Socks5代理、动静态代理、爬虫代理等国内外IP代理服务器,在线网页或软件app代理IP方便快...

  • 浩欧博:9月12日获融资买入65.77万元,占当日流入资金比例28.37%

    同花顺数据中心显示,浩欧博9月12日获融资买入65.77万元,占当日买入金额的28.37%,当前融资余额2237.97万元,占流通市值的1.51%,低于历史20...

  • CroxyProxy 免费网页代理

    CroxyProxy免费Web代理 Croxyproxy是一种安全的web代理服务,欧博允许您浏览具有更高隐私级别的各种网站。您可以使用安全连接访问Facebo...

  • 《民法典》第七章 代理

    第七章 代理第一节 一般规定第一百六十一条 民事主体可以通过代理人实施民事法律行为。依照法律规定、当事人约定或者民事法律行为的性质,应当由本人亲自实施的民事法律...

  • v2rayng 分应用代理完全指南

    本文详细介绍了如何使用v2rayng软件进行分应用代理的设置和使用方法,包括软件下载、配置教程、常见问题解答等内容,帮助读者更好地了解和使用v2rayng进行分...

  • 青龙面板教程(五):代理设置

    文章浏览阅读1.7w次,点赞8次,收藏39次。本文介绍了如何在青龙面板中为Python和JavaScript脚本设置代理,以解决公网服务器上IP限制的问题。对于...

  • operaaudio

    M99 plus Integrate Tube Amplifier The fifth anniversary model, with vol...

  • 《一梦江湖》官方网站-春季特典「江湖万象」正式开启!

    春季资料片「江湖万象」正式来袭!三大场景地图全面更新,探索就有机会获得绑元、挂件、耳饰外观等专属奖励!5月10日,万道皆侠,玩你想的任何玩法即可拿齐奖励!全新巫...

  • Win10怎么手动设置代理?Win10系统代理设置方法

    工作中经常会使用代理服务器,代理服务器有很多作用,可以改善网络速度,隐藏IP地址等等。由于win10系统界面不熟悉,很多用户不清楚win10怎么手动设置代理?这...

  • SSH协议中隧道与代理的用法详解

    SSH 协议是 Linux 系统中使用较为频繁的协议之一,欧博abg通常用于远程管理主机或服务器,默认使用 22 端口,可类比 Windows 系统中的 tel...