Checking the environment variables and also HTTP configuration options does not reveal something. Is there a way to do this?
问题:
回答1:
With git 2.8 (March 2016), you can force git fetc
h/push
/clone
to use IPV4 or IPV6.
(for git pull
, see below Git 2.16, Q1 2018)
See commit c915f11 (03 Feb 2016) by Eric Wong (ele828
).
(Merged by Junio C Hamano -- gitster
-- in commit e84d5e9, 24 Feb 2016)
connect
&http
: support-4
and-6
switches for remote operationsSometimes it is necessary to force IPv4-only or IPv6-only operation on networks where name lookups may return a non-routable address and stall remote operations.
-4, --ipv4:
Use IPv4 addresses only, ignoring IPv6 addresses.
-6; --ipv6:
Use IPv6 addresses only, ignoring IPv4 addresses.
Update Git 2.16 (Q1 2018): Contrary to the documentation, "git pull -4/-6 other-args
" did not ask the underlying "git fetch
" to go over IPv4/IPv6, which has been corrected.
See commit ffb4568 (19 Nov 2017) by Shuyu Wei (``).
(Merged by Junio C Hamano -- gitster
-- in commit c2b6135, 27 Nov 2017)
回答2:
The more generic solution (that also works for BSD) is to edit the global /etc/ssh/ssh_config
or per-user ~/.ssh/config
and add/replace the entry:
AddressFamily any
with
AddressFamily inet
You can also set this for just a single host:
Host example.com
AddressFamily inet
回答3:
In 99% of cases, you should not be doing this. The real answer to the question is fix your IPv6 connection.
Failing that, you can edit /etc/gai.conf
to prefer IPv4 over IPv6. gai.conf modifies the behaviour of getaddrinfo()
, which almost all IPv6–supporting applications use to resolve hostnames.
Almost all systems ship with a copy of /etc/gai.conf within their glibc
or libc
package. If it is missing from /etc, usually I find a template copy is lurking somewhere within /usr/share/doc, for you to copy into /etc and modify accordingly.
回答4:
There are situations where upgrade git or where IPV6 is running but not working as expected, for example, under Windows Linux subsystem, my solutions is simple: just add the git/httpb/ssh IPV4 location on /etc/hosts.
Use host
to get the IPV4 address and append it to /etc/hosts with name for your own use, for example, 1.1.1.1 git4.server.com