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

目录

结论

需要满足什么条件?

[推荐方案:直接添加 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 管理权限

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

相关推荐
Safeploy安策数据1 小时前
政务云加密太慢?万兆服务器密码机如何破解高并发性能瓶颈
linux·运维·github
CJH(本人账号)1 小时前
免费开源国产:小米MiMo Code首日GitHub爆火
人工智能·ai·开源·github
2601_961963381 小时前
数据室里的“第一道锁”:电子保密协议(NDA)签署与防泄漏机制全解析
网络·人工智能·安全·金融·区块链·政务
冰^1 小时前
AI CC Switch 解决了什么?
人工智能·gpt·网络协议·chatgpt·github·aigc
IT新视界1 小时前
星环科技发布XClaw:全能桌面智能体,开启轻量安全的AI助手新时代
人工智能·科技·安全
2601_961875241 小时前
花生十三资料网盘|百度云|下载
数据库·windows·git·svn·eclipse·github
数字供应链安全产品选型1 小时前
软件供应链安全专项测评 —— 悬镜安全:代码安全、开源治理与 AI 赋能的全栈王者
人工智能·安全·开源
-山中问答-1 小时前
【智能体工具使用实战04】构建执行沙盒与安全边界
人工智能·安全·智能体·沙盒
SNSZR12 小时前
2026定制数字人平台选型:5大垂直行业解决方案对比
大数据·人工智能·安全