私有仓库跟踪开源项目
约 1044 字大约 3 分钟
2026-01-12
前言
GitHub 上有挺多开源项目,可以一键 Fork 后自部署到 Cloudflare、Vercel 或其他平台,但我们往往需要修改为自己的配置。我希望的是在源文件中写好配置值,然后提交自动部署。当上游项目有更新时,拉取上游合并然后提交自动部署。但 Fork 的项目也必须是公开的,才能在页面上通过点击Sync Fork按钮来同步,可我仓库内的配置又不想暴露,所以仓库只能私有,但私有化仓库就必须离开 Fork 网络,也就不能通过点击Sync Fork按钮来同步了。那我们就得自己实现同步。
实现同步
我们以LogVar 弹幕这个项目为例,这是一个非常灵活的弹幕服务,支持在 serverless 服务上部署。
首先 Fork 原仓库(https://github.com/huangxd-/danmu_api)到自己的仓库(https://github.com/mayeona/danmu_api),然后在自己的仓库中设置为私有。
接着将自己的仓库 Clone 到本地,进行如下设置:
# 创建 prod 分支(用于发布),main 分支用于同步上游
git branch prod
# 查看当前远程仓库
git remote -v
# 显示
# origin git@github.com:mayeona/danmu_api.git (fetch)
# origin git@github.com:mayeona/danmu_api.git (push)
# 添加上游仓库,设置名称为 upstream
git remote add upstream git@github.com:huangxd-/danmu_api.git
# 查看当前远程仓库
git remote -v
# 显示
# origin git@github.com:mayeona/danmu_api.git (fetch)
# origin git@github.com:mayeona/danmu_api.git (push)
# upstream git@github.com:huangxd-/danmu_api.git (fetch)
# upstream git@github.com:huangxd-/danmu_api.git (push)
# (可选)其实 upstream 我们是没有 push 权限的,为了明显一点,可以将 upstream 的 push 地址设置成一个无效地址
git remote set-url --push upstream DISABLED
# 本地切到 main 分支
git checkout main
# 拉取上游 main 分支的代码
git fetch upstream main
# 将 upstream 的 main 分支覆盖到本地的 main 分支
git reset --hard upstream/main
# (可选)将 main 分支推送到远程仓库
git push -f origin main
# 切换到 prod 分支
git checkout prod
# 合并 main 分支到 prod 分支
# 这一步用可视化操作方便些,vscode 系可以用 Git Graph 插件
git merge main
# 将 prod 分支推送到远程仓库
git push origin prod通常情况下将 prod 分支推送到远程后,就会自动触发 Hook 让 Vercel/Cloudflare 自动构建并发布了,但是这其中可能会存在隐藏问题。
当我们用Git Graph合并分支时,会弹出一个提示框,有三个选项:
- Create a new commit even if fast-forward is possible: 产生新的提交,强制生成一个“合并节点”,在 Git 提交历史上会显示分叉,会保留合并分支的所有提交记录。这通常用于新版发布。
- Squash Commits: 产生新的提交,但合并分支的所有提交会被压缩成一个提交,这就会丢失历史提交记录。适用于无关紧要的提交历史,想让提交看起来整洁些的。
- No Commit: 仅合并代码但不提交。适用于合并代码后自己做些修改,之后再手动提交的。这个一般很少会用到。
默认情况下我们可以都不勾选,直接点击Merge按钮即可。这就会触发Fast-forward合并,不会产生新的提交。但这会完全保留提交记录,包括提交者。可 Vercel 的自动构建很严格,要求提交者的邮箱和 GitHub 默认邮箱必须一致,否则不会构建。除非付费升级为团队协作,将其他人拉进团队,才可以触发自动构建。
如果我们已经通过Fast-forward合并了,导致不能自动构建,那么简单点可以创建一个新的空的提交,来触发自动构建。
git commit --allow-empty -m "trigger vercel deploy"Tips: 如果是 GitHub 上的邮箱改了,可以修改 Git 全局配置,或者修改项目级的配置。
全局配置:
git config --global user.email "your-email@example.com"项目级配置:
git config user.email "your-email@example.com"
如果还没完成Git Graph合并,那么可以选择第 1 或 2 项,产生新的提交,提交人就是自己了,可以触发自动构建。
