Git协议连接被拒绝:本地仓库无法用git:///http://克隆如何解决?
解决Git使用git://或http://协议克隆本地仓库时连接被拒绝的问题
问题描述
我在本地主机(localhost)创建了一个Git远程仓库,推送项目后,可通过以下命令正常克隆:
git clone ssh://127.0.0.1/repo-r/haq
但尝试使用git://或http://协议克隆时,出现连接被拒绝的错误:
$ git clone git://127.0.0.1/repo-r/haq/haq.git Cloning into 'haq'... fatal: unable to connect to 127.0.0.1: 127.0.0.1[0: 127.0.0.1]: errno=Connection refused
原因
SSH协议能正常工作是因为系统默认运行了SSH服务,但git://依赖git-daemon进程提供服务,http://需要HTTP服务器配合Git的http-backend处理请求,你当前没有启动对应的服务,所以导致连接被拒。
解决办法
一、临时启用git-daemon(适配git://协议)
- 切换到你的仓库根目录:
cd /path/to/repo-r/haq
- 启动git-daemon,允许导出仓库:
git daemon --reuseaddr --base-path=. --export-all
- 保持这个终端窗口处于运行状态,新开一个终端执行克隆命令:
git clone git://127.0.0.1/haq.git
注意:git-daemon会基于启动时的
base-path定位仓库,所以克隆路径要对应调整。
二、临时启用HTTP服务(适配http://协议)
用Python的简易HTTP服务器配合Git的http-backend是最快捷的方式:
- 切换到仓库所在的上级目录(比如
repo-r目录):
cd /path/to/repo-r
- 启动带CGI支持的HTTP服务器:
# Python3 python3 -m http.server 8000 --cgi # Python2 python -m SimpleHTTPServer 8000 --cgi
- 新开终端执行克隆命令:
git clone http://127.0.0.1:8000/haq/.git
三、长期稳定方案
如果需要长期通过这些协议访问仓库,可以配置系统服务:
- git://协议:配置systemd服务,设置git-daemon开机自启,指定固定的仓库根路径和参数。
- http://协议:部署Nginx或Apache服务器,配置CGI规则,将Git请求转发到
git http-backend处理。
四、替代方案:继续使用SSH协议
如果只是本地开发场景,SSH协议无需额外启动服务,稳定性足够,直接沿用你原来的克隆命令即可:
git clone ssh://127.0.0.1/repo-r/haq
内容的提问来源于stack exchange,提问作者PersianGulf
相关产品推荐
相关产品推荐

