Git 有哪些传输协议
Git 支持本地路径、file://、SSH(git@host:path)、HTTPS 以及 git:// 等多种传输方式,区别在于认证方式、端口与能否穿过企业防火墙。日常协作主要在 SSH 与 HTTPS 之间选择;git:// 既不加密也不认证,公网平台已普遍不推荐或默认关闭。
基本信息
| SSH | 默认 22 端口,可用 ssh://user@host:2222/path 换端口,走密钥认证 |
|---|---|
| HTTPS | 443 端口,凭据交给 credential helper 或平台令牌,穿透性最好 |
| git:// | 9418 端口,只读且无认证,多数平台不建议用于公网 |
| 本地路径 | /srv/git/app.git 或 file://,走文件系统权限,用于同机或共享盘 |
典型使用场景
- 公司网络只放行 443 时用 HTTPS 克隆与推送
- CI 免交互自动化用部署密钥或访问令牌
- 内网自建 GitLab 日常开发多用 SSH,配合 ssh-agent
- 内网镜像同步走本地路径或 SSH,避免占用公网带宽
- 开源项目匿名只读克隆用 HTTPS,无需密钥托管
常用示例
常用示例
git clone https://github.com/org/repo.git # HTTPS:443 端口,兼容性最好
git clone git@github.com:org/repo.git # SSH:使用 ~/.ssh 下的密钥
git clone ssh://git@example.com:2222/org/repo.git # SSH 非默认端口
git clone --depth=1 https://github.com/org/repo.git # 浅克隆,只取最新提交减少流量
git remote -v # 查看当前远端使用哪种协议
git remote set-url origin git@example.com:org/repo.git # 由 HTTPS 切换到 SSH协议对照
| 协议 | 默认端口 | 认证方式 | 适用网络 |
|---|---|---|---|
| SSH | 22,可自定义 | 公钥私钥 | 可出 22 或自建端口 |
| HTTPS | 443 | 账号密码或令牌 | 只放行 443 的受限网络 |
| git:// | 9418 | 无认证 | 仅内网只读镜像 |
| 本地与 file | 无 | 文件系统权限 | 同机或挂载共享目录 |
两条通道的代理配置互不相通:HTTPS 看 http.proxy 与 https.proxy 及环境变量,SSH 要看 ~/.ssh/config 中的 ProxyCommand 或 ProxyJump,排查连通性时要分别验证。
git:// 不加密也不验证服务端身份,内容可能被中间人篡改,公网只读克隆也应改用 https。
切换协议不必重新克隆:git remote set-url origin <新地址> 即可,但已缓存的凭据不会自动迁移。切到 HTTPS 后首次推送要重新认证,切到 SSH 前要确认本机公钥已经上传到平台账号。
同一个仓库允许并存多个远端:只读上游用 HTTPS、内部镜像用 SSH 推送是常见组合。用 git remote -v 分别核对地址与协议,推送时显式写出远端名,避免推到错误的位置。