自动同步上游仓库到你的 GitHub 仓库,支持多仓库、多用户、多平台通知。
- ✅ 多仓库同步 - 一个 workflow 管理多个仓库
- ✅ 多用户支持 - 不同仓库可使用不同的 PAT
- ✅ 智能检测 - 只有上游有更新时才同步
- ✅ 并行执行 - 所有仓库同时同步,效率更高
- ✅ 多平台通知 - 支持 Telegram、Discord、钉钉、企业微信、Server酱、邮件
- ✅ 完整历史 - commit 历史与上游完全一致
因为要跨仓库推送,需要创建一个有权限的 token:
- 打开 GitHub → 点击头像 → Settings
- 左侧菜单最底部 → Developer settings
- Personal access tokens → Tokens (classic) → Generate new token (classic)
- 设置:
- Note:
Sync GitHub Repo - Expiration: 选择一个合适的时间(或 No expiration)
- 权限勾选:
repo(完整的仓库访问权限) - 权限勾选:
workflow(可选,视上游仓库是否包含GitHub Actions workflow 文件 )
- Note:
- 点击 Generate token
- 复制生成的 token(只显示一次!)
👉 快速创建 PAT
进入你的仓库 → Settings → Secrets and variables → Actions
| 名称 | 说明 | 示例 |
|---|---|---|
TOKEN_USER1 |
用户1 的 GitHub PAT | ghp_xxxx... |
TOKEN_USER2 |
用户2 的 GitHub PAT(可选) | ghp_xxxx... |
| 名称 | 说明 |
|---|---|
SYNC_REPOS |
同步配置(JSON 格式) |
NOTIFY_CONFIG |
通知配置(JSON 格式,可选) |
[
{
"upstream": "https://github.com/owner1/repo1.git",
"target": "myuser/repo1",
"branch": "main",
"token": "TOKEN_USER1"
},
{
"upstream": "https://github.com/owner2/repo2.git",
"target": "myuser2/repo2",
"branch": "main",
"token": "TOKEN_USER2"
}
]
⚠️ 注意:这里的token的值填写上方Secrets(密钥)中名称
| 字段 | 说明 |
|---|---|
upstream |
上游仓库地址(https 格式) |
target |
目标仓库(格式:用户名/仓库名) |
branch |
要同步的分支 |
token |
Secrets 中的 Token 名称 |
👉 快速直达:
- 添加 Secret:
Settings → Secrets and variables → Actions → New repository secret- 添加 Variable:
Settings → Secrets and variables → Actions → Variables → New repository variable
git add .github/workflows/sync-upstream.yml
git commit -m "Add sync workflow"
git push origin main- 进入仓库 → Actions 标签
- 选择 Sync Upstream Repositories
- 点击 Run workflow
支持多平台同时发送通知。
{
"telegram": {"chat_id": "123456789"},
"discord": {},
"dingtalk": {},
"wecom": {},
"serverchan": {},
"email": {"to": "user@example.com", "from": "noreply@example.com"}
}只需配置你要使用的平台,不使用的平台可以不写。
| 平台 | Secret 名称 | 获取方式 |
|---|---|---|
| Telegram | TELEGRAM_BOT_TOKEN |
@BotFather 创建 Bot |
| Discord | DISCORD_WEBHOOK |
服务器设置 → 整合 → Webhook |
| 钉钉 | DINGTALK_WEBHOOK |
群设置 → 智能群助手 → 添加机器人 |
| 企业微信 | WECOM_WEBHOOK |
群设置 → 添加群机器人 |
| Server酱 | SERVERCHAN_KEY |
sct.ftqq.com |
| 邮件 | SMTP_SERVER |
如 smtp.gmail.com:465 |
SMTP_USERNAME |
邮箱用户名 | |
SMTP_PASSWORD |
邮箱密码或应用专用密码 |
| 特性 | 本方案(Actions 自动同步) | GitHub 内置 Sync Fork |
|---|---|---|
| 同步效果 | ✅ 与上游一致 | ✅ 与上游一致 |
| commit 历史 | ✅ 完全一致 | ✅ 完全一致 |
| 自动执行 | ✅ 定时自动 | ❌ 需要手动点击 |
| 多仓库支持 | ✅ 支持 | ❌ 不支持 |
| 通知功能 | ✅ 多平台 | ❌ 无 |
| 同步方式 | Force push(强制覆盖) | Merge/Fast-forward |
| 本地修改 | ||
| 适用场景 | 纯镜像,不做任何修改 | 可能有自己的改动 |
修改 workflow 中的推送命令:
# 同步所有分支 + 所有标签(会覆盖/删除目标仓库的其他分支)
git push --mirror --force "$TARGET_URL"git push --force "$TARGET_URL" main:main dev:dev release:release编辑 cron 表达式:
schedule:
- cron: '0 0 * * *' # 每天 UTC 0:00(北京时间 8:00)
- cron: '0 */6 * * *' # 每 6 小时
- cron: '*/30 * * * *' # 每 30 分钟MIT