配置 git 默认使用 IPv4 而不是 IPv6

问题描述 投票:0回答:5

检查环境变量和 HTTP 配置选项并没有透露任何信息。有办法做到这一点吗?

git ipv6 ipv4
5个回答
91
投票

更通用的解决方案(也适用于 BSD)是编辑全局

/etc/ssh/ssh_config
或每个用户
~/.ssh/config
并添加/替换条目:

AddressFamily any 

使用以下行(其中

inet
对应于
ipv4
):

AddressFamily inet

您也可以仅为单个主机进行设置:

Host example.com
    AddressFamily inet

48
投票

使用 git 2.8(2016 年 3 月),您可以强制

git fetch
/
push
/
clone
使用 IPV4 或 IPV6。
(对于
git pull
,请参阅下文 Git 2.16,2018 年第一季度)

请参阅 Eric Wong (ele828)

commit c915f11(2016 年 2 月 3 日)。
(由 Junio C Hamano --
gitster
--
合并于 commit e84d5e9,2016 年 2 月 24 日)

connect
&
http
:支持
-4
-6
开关进行远程操作

有时,有必要在名称查找可能返回不可路由地址并停止远程操作的网络上强制仅进行 IPv4 或仅进行 IPv6 操作。

-4, --ipv4:

仅使用 IPv4 地址,忽略 IPv6 地址。

-6; --ipv6:

仅使用 IPv6 地址,忽略 IPv4 地址。


更新 Git 2.16(2018 年第 1 季度):与文档相反,“

git pull -4/-6 other-args
”没有要求底层“
git fetch
”通过 IPv4/IPv6,这一点已得到纠正。

参见 commit ffb4568(2017 年 11 月 19 日),作者:Shuyu Wei (``)
(由 Junio C Hamano --

gitster
-- 合并于 commit c2b6135,2017 年 11 月 27 日)


在 Git 2.29(2020 年第 4 季度)中,“

git fetch --all --ipv4/--ipv6
(man)”忘记将协议选项传递给与各个遥控器通信的“git fetch”实例,这一问题已得到纠正。

请参阅提交 4e735c1(2020 年 9 月 15 日),作者:Alex Riesen (

ar-cetitec
)
(由 Junio C Hamano --
gitster
--
合并于 commit 6854689,2020 年 9 月 22 日)

fetch
:将
--ipv4
--ipv6
选项传递给子提取

签字人:Alex Riesen

这些选项表明用户对整个获取操作的意图,并且在子获取中忽略它们(即“

--all
”和子模块的递归获取)是非常意外的,例如,当打算将所有通信限制为由于某种原因的特定传输协议。


使用 Git 2.42(2023 年第 3 季度),无效选项

--no-ipv4
ou
--no-ipv6
会被提前拒绝。

请参阅 Junio C Hamano (gitster)提交 a2dad48

commit ae2c912(2023 年 7 月 18 日)。
(由 Junio C Hamano --
gitster
--
合并于 commit 9562f19,2023 年 7 月 27 日)

fetch
:拒绝
--no-ipv[46]

现在我们已经引入了

OPT_IPVERSION()
,调整其实现,以便“
git clone
(man)、“
git fetch
(man),以及"
git push
"(man) 拒绝使用仅 IP 版本 N 选项的否定形式。

因此,如果您使用

--no-ipv[46]
,您将看到“未知选项”。


14
投票

在 99% 的情况下,您不应该这样做。这个问题的真正答案是修复你的 IPv6 连接

如果失败,您可以编辑

/etc/gai.conf

 以优先选择 IPv4 而不是 IPv6。 gai.conf 修改了 
getaddrinfo()
 的行为,几乎所有支持 IPv6 的应用程序都使用它来解析主机名。

几乎所有系统都在其

glibc

libc
 包中附带 /etc/gai.conf 的副本。如果 /etc 中缺少它,通常我会发现模板副本潜伏在 /usr/share/doc 中的某处,供您复制到 /etc 并进行相应修改。


1
投票
有些情况下升级git或者IPV6正在运行但没有按预期工作,例如在Windows Linux子系统下,我的解决方案很简单:只需在/etc/hosts上添加git/httpb/ssh IPV4位置即可。

使用

host

 获取 IPV4 地址并将其附加到 /etc/hosts 中,并命名为您自己使用的名称,例如 
1.1.1.1 git4.server.com

    


0
投票
Danwin 提供了一个公共代理服务器,可用于在 IPv6 网络上访问 GitHub,直到 GitHub 提供原生 IPv6 支持。

hosts

文件底部添加以下行

2a01:4f8:c010:d56::2 github.com 2a01:4f8:c010:d56::3 api.github.com 2a01:4f8:c010:d56::4 codeload.github.com 2a01:4f8:c010:d56::5 objects.githubusercontent.com 2a01:4f8:c010:d56::6 ghcr.io 2a01:4f8:c010:d56::7 pkg.github.com npm.pkg.github.com maven.pkg.github.com nuget.pkg.github.com rubygems.pkg.github.com
参考:

https://danwin1210.de/github-ipv6-proxy.php

© www.soinside.com 2019 - 2024. All rights reserved.