如果这是防火墙阻止git:协议端口(9418)的问题,那么您应该进行更持久的更改,这样您就不必记住为每个git repo发出其他帖子建议的命令。
以下解决方案也适用于可能也使用git:协议的子模块。
由于git消息实际上并没有立即指向防火墙阻止端口9418,因此请尝试将其诊断为实际问题。
诊断问题
参考:https : //superuser.com/q/621870/203918和https://unix.stackexchange.com/q/11756/57414
我们可以使用多种工具来确定防火墙是否引起了我们的问题-使用系统上安装的任何一种。
# Using nmap
# A state of "filtered" against port 9418 (git) means
# that traffic is being filtered by a firewall
$ nmap github.com -p http,git
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT
Nmap scan report for github.com (192.30.252.131)
Host is up (0.24s latency).
PORT STATE SERVICE
80/tcp open http
9418/tcp filtered git
# Using Netcat:
# Returns 0 if the git protocol port IS NOT blocked
# Returns 1 if the git protocol port IS blocked
$ nc github.com 9418 < /dev/null; echo $?
1
# Using CURL
# Returns an exit code of (7) if the git protocol port IS blocked
# Returns no output if the git protocol port IS NOT blocked
$ curl http://github.com:9418
curl: (7) couldn't connect to host
好的,现在我们确定是git端口被防火墙阻止了,我们该怎么办?继续阅读:)
基本网址重写
Git提供了一种使用重写URL的方法git config
。只需发出以下命令:
git config --global url."https://".insteadOf git://
现在,就像魔术一样,所有git命令都将替换git://
为https://
该命令做了哪些更改?
使用以下命令查看全局配置:
git config --list
您将在输出中看到以下行:
url.https://.insteadof=git://
通过偷看一下~/.gitconfig
现在应该看到添加了以下两行的位置,可以看到文件的外观:
[url "https://"]
insteadOf = git://
需要更多控制权吗?
只需在替换中使用更完整/特定的URL。例如,要仅使GitHub URL使用https://而不是git://,可以使用类似以下内容:
git config --global url."https://github".insteadOf git://github
您可以使用不同的替换多次运行此命令。但是,如果URL匹配多个替换,则最长的匹配“获胜”。每个URL仅替换一次。
系统管理员的系统范围更改
如果您是Linux Sysadmin,并且不想让用户经历上述麻烦,则可以对整个系统进行快速git配置更改。
只需将以下内容编辑或添加到其中/etc/gitconfig
,您的用户就不必担心以上任何一项:
[url "https://"]
insteadOf = git://