安全协作:私有仓库的正确共享方式

目录

结论

需要满足什么条件?

[推荐方案:直接添加 Collaborator / Member](#推荐方案:直接添加 Collaborator / Member)

[GitHub 个人仓库](#GitHub 个人仓库)

[GitLab 项目](#GitLab 项目)

对方需要做什么?

[1. 对方生成 SSH key](#1. 对方生成 SSH key)

[2. 对方把公钥加到自己的平台账号](#2. 对方把公钥加到自己的平台账号)

[3. 对方测试 SSH 连接](#3. 对方测试 SSH 连接)

[4. 对方 clone 私有仓库](#4. 对方 clone 私有仓库)

不推荐的做法

[1. 不要把你的私钥发给对方](#1. 不要把你的私钥发给对方)

[2. 不要让对方用你的 Git 账号](#2. 不要让对方用你的 Git 账号)

[3. 不要为了多人协作滥用 Deploy Key](#3. 不要为了多人协作滥用 Deploy Key)

更稳妥的协作流程

推荐权限设置

[小项目 / 熟人协作](#小项目 / 熟人协作)

[生产项目 / 重要私有项目](#生产项目 / 重要私有项目)

[临时外包 / 不完全信任的人](#临时外包 / 不完全信任的人)

你可以按这个步骤操作

你这边

对方那边

最简单判断


结论

要让别人共同开发你的私有仓库,不要共享你的账号、密码、Token、SSH 私钥,也不要把他的公钥加到你的账号里

正确做法是:

把对方的 GitHub / GitLab / Gitee 账号添加为该私有仓库的成员或协作者,让他用自己的账号和自己的 SSH key 访问仓库。

私有仓库默认只对你和你显式授权的人可见;GitHub 文档也明确说,私有仓库只对所有者、显式共享访问权限的人,以及组织仓库中的特定成员可访问。(GitHub Docs)


需要满足什么条件?

条件 说明
你有仓库管理权限 你必须是仓库 owner、admin,或者有足够权限添加成员
对方有平台账号 例如 GitHub / GitLab / Gitee 账号
对方配置自己的 SSH key 或 HTTPS Token 这是对方电脑访问仓库的身份认证方式
你给对方授权 通过 Collaborator、Member、Team、Group 等方式
对方接受邀请 很多平台需要对方确认邀请后才生效
仓库地址正确 对方 clone 的必须是私有仓库的 SSH/HTTPS 地址

推荐方案:直接添加 Collaborator / Member

适合:

  • 你们是 2~5 人小团队;

  • 仓库是个人项目;

  • 想快速共同开发;

  • 暂时不需要复杂权限体系。

GitHub 个人仓库

路径一般是:

复制代码
Repository → Settings → Collaborators → Add people

GitHub 官方流程也是在仓库 Settings 的 Access 区域添加 Collaborators,然后通过用户名、姓名或邮箱搜索并邀请对方。(GitHub Docs)

需要注意:

如果是 GitHub 个人账号下的私有仓库 ,GitHub 文档说明 personal account repository 的 collaborator 在私有仓库中只能授予 write access ,不能像组织仓库那样给只读 collaborator 权限。(GitHub Docs)

也就是说,如果你的仓库在个人 GitHub 账号下,对方通常会有:

复制代码
clone / pull / push / 创建分支 / 提 PR

但不一定适合给不熟的人开放。


GitLab 项目

路径一般是:

复制代码
Project → Manage / Members → Invite members

GitLab 是基于角色控制权限的。添加用户到 group 或 project 时,需要给他分配角色,角色决定他能做什么。(GitLab Docs)

常见角色可以粗略理解为:

GitLab 角色 适合对象 权限倾向
Guest 只看 issue / 基础信息 权限最低
Reporter 查看代码、下载、拉取 适合只读协作
Developer 正常开发者 可以 push 分支、提交 MR
Maintainer 项目维护者 可以管理分支、合并、配置项目
Owner 所有者 最高权限,谨慎给

GitLab 官方文档中也列出了 Guest、Reporter、Developer、Maintainer、Owner 等项目/组角色级别。(GitLab Docs)


对方需要做什么?

对方被邀请后,在自己的电脑上配置自己的 SSH key。

1. 对方生成 SSH key

复制代码
ssh-keygen -t ed25519 -C "对方自己的邮箱"

2. 对方把公钥加到自己的平台账号

查看公钥:

复制代码
cat ~/.ssh/id_ed25519.pub

然后添加到:

复制代码
GitHub / GitLab / Gitee → 个人设置 → SSH Keys

注意:

是添加到对方自己的账号,不是添加到你的账号。


3. 对方测试 SSH 连接

GitHub:

复制代码
ssh -T git@github.com

GitLab:

复制代码
ssh -T git@gitlab.com

Gitee:

复制代码
ssh -T git@gitee.com

4. 对方 clone 私有仓库

例如:

复制代码
git clone git@github.com:你的用户名/仓库名.git

或者 GitLab:

复制代码
git clone git@gitlab.com:你的用户名/仓库名.git

不推荐的做法

1. 不要把你的私钥发给对方

错误做法:

复制代码
你把 ~/.ssh/id_ed25519 发给别人

风险:

  • 对方可以冒充你的身份访问仓库;

  • 平台日志里显示的是你在操作;

  • 之后很难区分是谁 push 的代码;

  • 私钥泄露后,你所有该 key 有权限的私有仓库都可能受影响。


2. 不要让对方用你的 Git 账号

错误做法:

复制代码
把你的 GitHub/GitLab 账号密码给别人

风险更高:

  • 无法审计责任;

  • 对方可能访问你其他私有项目;

  • Token、邮箱、组织权限也可能泄露;

  • 后续撤权很麻烦。


3. 不要为了多人协作滥用 Deploy Key

Deploy Key 更适合:

复制代码
服务器部署 / CI/CD 拉代码 / 某台机器只读访问某个仓库

不适合作为"给某个人开发权限"的主要方式。

人的权限应该通过:

复制代码
用户账号 + 仓库权限

机器的权限才适合通过:

复制代码
Deploy Key / CI Token / Access Token

更稳妥的协作流程

如果你们是共同开发,建议不要让所有人直接 push 到 main

推荐流程:

复制代码
main 分支
  ↑
Pull Request / Merge Request
  ↑
feature/xxx 分支
  ↑
开发者提交代码

也就是:

复制代码
git checkout -b feature/login-api
git add .
git commit -m "feat: add login api"
git push origin feature/login-api

然后在平台上创建:

复制代码
Pull Request / Merge Request

你审核后再合并。

GitHub 支持通过 protected branch 要求合并前必须经过 Pull Request,也可以设置审批数量;官方文档中明确提到可以要求 PR 后才能合并,并可要求 approvals。(GitHub Docs)

GitLab 的 protected branches 也可以限制直接 push,并结合 Merge Request / Code Owner 审批控制合并。(GitLab Docs)


推荐权限设置

小项目 / 熟人协作

推荐:

复制代码
对方权限:Write / Developer
main 分支:禁止直接 push
合并方式:PR / MR

适合:

  • 课程项目;

  • 小团队开发;

  • 个人项目找朋友协作;

  • 代码风险不高。


生产项目 / 重要私有项目

推荐:

复制代码
普通开发者:Developer / Write
核心维护者:Maintainer / Admin
main / master:保护分支
合并要求:至少 1 人 review
CI 通过后才能 merge

适合:

  • 真实业务项目;

  • 有部署环境;

  • 多人长期维护;

  • 不希望别人直接改坏主分支。


临时外包 / 不完全信任的人

更推荐:

复制代码
Fork + Pull Request
或者只给最小权限

如果平台支持只读权限,就先给只读;如果是 GitHub 个人私有仓库,要注意它对 personal repository collaborator 的权限粒度有限。(GitHub Docs)

更严谨的方式是把仓库迁移到 Organization,然后用 Team 管理权限。GitHub 组织仓库可以通过 repository roles 管理成员访问权限。(GitHub Docs)


你可以按这个步骤操作

你这边

  1. 打开私有仓库;

  2. 进入仓库 Settings;

  3. 找到 Collaborators / Members / Access;

  4. 输入对方用户名或邮箱;

  5. 选择权限;

  6. 发送邀请;

  7. 设置保护分支,避免直接 push 到 main


对方那边

  1. 接受邀请;

  2. 在自己电脑生成 SSH key;

  3. 把公钥添加到自己的 Git 平台账号;

  4. 测试 SSH;

  5. clone 仓库;

  6. 新建分支开发;

  7. 提交 PR / MR。


最简单判断

复制代码
让别人共同开发私有仓库 ≠ 给他你的 SSH key
让别人共同开发私有仓库 = 给他的账号授权

推荐方案:

复制代码
添加对方为 Collaborator / Member
+ 对方使用自己的 SSH key
+ 通过 feature 分支和 PR/MR 协作
+ main 分支开启保护

备选方案:

复制代码
组织 / Group / Team 管理权限

适合人变多、项目变重要、权限需要分层的时候。

相关推荐
0xR3lativ1ty2 小时前
AI本地部署工具火热趋势
github
聚铭网络3 小时前
【一周安全资讯】两项数据资产分类与登记国家标准9月1日实施;索尼、华纳联合起诉Anthropic,指控盗用版权音乐训练Claude模型
人工智能·安全·分类
今日热点3 小时前
Windows 系统 C 盘深度清理教程:安全释放存储空间,避开误删风险
windows·安全
青软青之LIMS3 小时前
King‘s LIMS如何成为快消品行业质量安全的“数字护城河“
安全·云计算
LlmCraft|大模型工程实践4 小时前
14. CI/CD 流水线中集成 Docker:GitHub Actions 自动构建部署
ci/cd·docker·github
hulihutu444 小时前
拒绝延期、bug、货不对板:2026 管理系统定制开发落地保障手册
github·bug·鸿蒙系统·数据库管理员
Sagittarius_A*4 小时前
CVE-2026-42271:从 MCP stdio 测试接口看 LiteLLM 的命令执行风险与防御闭环
网络·windows·安全·cve·rce
外域速览4 小时前
OpenAI Astra 跨过「高危红线」、李飞飞世界模型 Atlas 落地:AI 行业进入「安全与落地」双拐点
人工智能·安全
是隼人4 小时前
buuctf-pwn PWN4(双引号的转义缺陷)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
隔窗听雨眠4 小时前
活动中台系统慢SQL治理实践:从监控告警到性能优化的全链路方法论
sql·性能优化·github