如何配置单Git远程仓库多IP实现跨网络免切换推拉操作
Git跨内外网自动适配远程仓库配置方案
原有配置失效原因
你之前用的git remote set-url --add逻辑根本不对:这个参数的作用是给同一个远程仓库加多个并行推送目标,配完之后每次git pushGit会同时往两个地址都推一遍,完全不会判断哪个地址能通;而且你只给公网IP配了拉取地址,在内网连不上公网IP的时候,git pull直接就挂了,根本达不到自动选路的效果。
正确配置方案
这个方案通过SSH客户端的条件匹配逻辑自动判断网络环境,优先走内网地址,内网不通时自动切公网地址,一次配置永久生效,不需要每次切网络手动改地址。
步骤1:配置本地SSH自定义主机规则
编辑本地SSH配置文件:
- Linux/macOS路径:
~/.ssh/config - Windows路径:
C:\Users\你的用户名\.ssh\config
在文件末尾追加如下配置:
Host git-myprj User gogma Port 22 HostName 192.168.x.x # 缩短连接超时,快速判断连通性,避免卡很久 ConnectTimeout 1 ConnectionAttempts 1 # 内网IP不可达时自动切换公网IP Match host git-myprj !exec "ping -c1 -W1 192.168.x.x >/dev/null 2>&1" HostName 223.x.x.x
注意:Windows系统请将
Match行内的ping命令替换为ping -n 1 -w 1000 192.168.x.x >nul 2>&1
Linux/macOS保存配置后,执行chmod 600 ~/.ssh/config修正文件权限,不然SSH会认为配置文件权限过宽不安全,拒绝读取规则。
配置完成后可以直接在终端执行ssh git-myprj测试,能正常登录服务器就代表规则生效。
步骤2:修正Git远程仓库地址
进入本地Git项目目录,先删掉之前配错的origin远程,再绑定自定义的SSH主机地址:
# 删除原有错误配置的origin git remote remove origin # 重新添加origin,使用SSH配置里的自定义主机别名 git remote add origin ssh://git-myprj/home/gogma/git/prj.git
验证配置
执行git remote -v,返回结果如下即为配置正确:
$ git remote -v origin ssh://git-myprj/home/gogma/git/prj.git (fetch) origin ssh://git-myprj/home/gogma/git/prj.git (push)
之后不管在内网还是外网环境,直接执行git pull/git push即可,SSH会自动选择当前可达的IP连接,全程不需要手动干预。
内容的提问来源于stack exchange,提问作者gogma
相关产品推荐
相关产品推荐

