返回
如何将 Fork 的 GitHub 仓库私有化并同步更新?
开发配置
2024-07-15 10:21:18
在 GitHub 中,我们经常需要将公共仓库 Fork 到自己的账户中进行修改和开发。然而,GitHub 不支持将一个 Fork 仓库设为私有,这可能会带来一些不便。为了绕过这一限制,可以使用 import
的方式创建一个新的非 Fork 仓库,并通过编写 GitHub Actions workflow 来实现与上游仓库的同步。
背景
- 需求:将一个公开的 GitHub 仓库 Fork 并私有化,同时能够保持与上游仓库的同步。
- 挑战:GitHub 不允许将 Fork 仓库设为私有。
- 解决方案:使用
import
功能创建一个新的非 Fork 仓库,并编写 GitHub Actions workflow 实现自动同步。
步骤一:创建非 Fork 仓库
- 在 GitHub 中新建一个空仓库。
- 使用
import
功能,将公共仓库的内容导入到新建的仓库中。具体操作如下:- 在目标仓库页面点击 “Import code”。
- 输入要导入的公共仓库的 URL,完成导入操作。
步骤二:编写 GitHub Actions Workflow
为了实现自动同步,需要在新仓库中创建一个 GitHub Actions workflow 文件。
在仓库根目录下创建 .github/workflows/sync.yml
文件,并添加以下内容:
name: Upstream Sync
permissions:
contents: write
on:
schedule:
- cron: "0 0 * * *" # 每天执行一次
workflow_dispatch:
jobs:
sync_latest_from_upstream:
name: 从上游仓库同步最新的提交
runs-on: ubuntu-latest
steps:
# 步骤 1: 运行标准的 checkout 操作
- name: Checkout target repo
uses: actions/checkout@v3
# 步骤 2: 运行同步操作
- name: Sync upstream changes
id: sync
uses: aormsby/Fork-Sync-With-Upstream-action@v3.4
with:
upstream_sync_repo: 上游仓库的用户名/上游仓库名
upstream_sync_branch: main
target_sync_branch: main
target_repo_token: ${{ secrets.GITHUB_TOKEN }} # 自动生成,无需设置
# 设置 test_mode 为 false 以进行实际操作
test_mode: false
- name: Sync check
if: failure()
run: |
echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次,详细教程请查看:https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E6%89%93%E5%BC%80%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0"
echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork. Please refer to the detailed tutorial for instructions: https://github.com/Yidadaa/ChatGPT-Next-Web#enable-automatic-updates"
exit 1
解释
- schedule:定义了 workflow 的触发时间,这里设置为每天执行一次。
- workflow_dispatch:允许手动触发该 workflow。
- steps:包含两个主要步骤:
- Checkout 当前仓库。
- 使用
aormsby/Fork-Sync-With-Upstream-action
Action 进行上游仓库的同步。
- Sync check:在同步失败时输出错误信息,并提示手动同步。
总结
通过以上步骤,我们可以在一个非 Fork 的 GitHub 仓库中实现与上游仓库的自动同步,解决了无法将 Fork 仓库设为私有的问题。这一方法结合了 import
功能和 GitHub Actions workflow,确保我们能够持续获取上游仓库的最新更新。