这一篇在干嘛?

前面几篇你一直在用 GitHub 当远程。这一篇掀开服务端的盖子:Git 用什么协议传输、服务器上放的是什么形态的仓库、自己怎么搭一个最小远端,最后给托管平台选型一个决策依据。对应《Pro Git》第 4 章。

四种传输协议

协议形式优点缺点适用
本地协议git clone /path/to/repo简单、共享文件系统即可远程协作基本没用同机/局域网
HTTP(S)https://github.com/...通用、穿防火墙、可匿名读推送需凭证最常用的公开渠道
SSHgit@github.com:user/repo.git加密、认证强、读写都方便外网匿名只读不行团队内部首选
Git 协议git://...(9418 端口)最快无认证无授权,基本只读已很少用

日常结论:对外发布用 HTTPS,团队内部读写用 SSH

服务器上放的是什么:裸仓库

普通仓库的工作目录里混着两样东西:.git 数据库和你正在编辑的文件。但远端仓库不需要工作目录——没人会登录到服务器上改代码,它只负责存历史、收推送。

所以服务端放的是裸仓库(bare repository):只有 Git 数据库,没有工作区。约定俗成目录名以 .git 结尾:

git init --bare /srv/git/myproject.git

新手最常见的困惑

把带工作区的普通仓库目录直接当远端用,push 时会被 Git 拒绝(保护你不小心推到正在干活的分支)。远端一律用 --bare

最小可用远端:SSH 方案三步走

1. 服务器上建裸仓库

ssh user@server
git init --bare /srv/git/myproject.git

2. 本地生成 SSH 公钥(没有的话)

ssh-keygen -t ed25519 -C "your_email@example.com"
# 一路回车即可;公钥在 ~/.ssh/id_ed25519.pub

.pub 公钥内容追加到服务器的 ~/.ssh/authorized_keys,私钥永远留在自己电脑上。

3. 本地添加远程并推送

git remote add origin user@server:/srv/git/myproject.git
git push -u origin main

同事们用同样 URL 克隆、每人配好公钥,一个零成本团队 Git 服务就跑起来了。多个团队成员共用同一个系统账号时,可用 git-shell 把该账号限制成只能执行 Git 操作,增强安全性。

不想自己维护服务器:托管平台

自建意味着要管权限、备份、Web 界面。大多数团队选择托管服务:

  • GitHub:全球最大开源社区,生态最强,协作流程(Issue/PR/Actions)事实标准。
  • GitLab:可自建的开源全家桶,内置 CI/CD,企业内网常用。
  • Gitee 等国内平台:国内访问速度快。

选型一句话:开源项目/个人项目 → GitHub;公司要私有部署 → GitLab;在意国内访问速度 → 国内托管

小结

  • 协议选型:公开读用 HTTPS,团队读写用 SSH。
  • 远端仓库是裸仓库(无工作区),git init --bare 创建。
  • SSH 远端三步:服务器建裸仓库 → 配公钥 → remote add + push -u
  • 不想运维就用托管:GitHub / GitLab / 国内平台。

学完你会得到:

  • 四种协议的选型依据
  • 「裸仓库」概念与最小自建远端实操
  • 托管平台的决策框架

自测

下一篇:🤝 分布式工作流:如何向项目贡献代码