Github Action: 上游同步
关于
这是一个专为分叉仓库设计的 Action!自动将你的分叉仓库中的分支与原始仓库的最新提交同步。它可以用于保持任意两个分支的同步。让你的所有内容保持最新!
支持本项目
该项目目前不处于积极开发阶段,但欢迎代码贡献。
我鼓励你在 Users 文件中分享使用 Fork Sync 的项目。对 Users 打开 PR,让其他人可以查看你的作品!
如果你希望看到这个项目有更多更新,请考虑参加一个简短的调查,帮助我了解你的需求。谢谢,祝编码愉快。
预期工作流程
这个 Action 的目的是保持非工作分支与远程仓库同步。不过,只要自定义输入满足你的需求,你也应该能够将其用于正在积极开发的分支。
配置 Action 时,需要指定你的目标
仓库(你想要更新的仓库)的一个分支,以及你的上游
仓库(更新来源)的一个分支。这个 Action 会检出这两个仓库的相应分支,检查是否有任何新的提交(通过哈希比较),然后将上游的新提交拉取到目标仓库。就是这么简单!
如何使用
添加一个工作流程到你的仓库,包含这个 Action(示例见下文)。请注意,计划的工作流程只在仓库的默认分支上运行。
输入变量
名称 | 是否必需? | 默认值 | 示例 |
---|---|---|---|
target_sync_branch | :white_check_mark: | 'master', 'main', 'my-branch' | |
target_repo_token | :white_check_mark: | ${{ secrets.GITHUB_TOKEN }} | |
upstream_repo_access_token | ${{ secrets.NAME_OF_TOKEN }} | ||
upstream_sync_repo | :white_check_mark: | 'aormsby/Fork-Sync-With-Upstream-action' | |
upstream_sync_branch | :white_check_mark: | 'master', 'main', 'my-branch' | |
test_mode | false | true / false |
始终将 target_repo_token
设置为 ${{ secrets.GITHUB_TOKEN }}
,以便 Action 可以推送到你的目标仓库。
有关可选输入变量、高级配置和处理私有仓库的更多信息,请参阅 Wiki - 配置
输出变量
名称 | 输出 | 描述 |
---|---|---|
has_new_commits | true/false | 如果在远程仓库中找到新的提交,输出 true;如果目标仓库已经是最新的,则输出 false。 |
如果你需要更多输出数据,请开一个 issue 来请求。
示例工作流程
name: '上游同步'
on:
schedule:
- cron: '0 7 * * 1,4'
# 每周一和周四的 07:00 运行
workflow_dispatch: # 点击 Github 仓库上的按钮!
inputs:
sync_test_mode: # 在手动运行工作流程时添加一个布尔选项,方便配置测试模式
description: 'Fork 同步测试模式'
type: boolean
default: false
jobs:
sync_latest_from_upstream:
runs-on: ubuntu-latest
name: 从上游仓库同步最新提交
steps:
# 必需步骤
# 步骤 1: 运行标准的检出操作,由 github 提供
- name: 检出目标仓库
uses: actions/checkout@v3
with:
# 可选: 设置要检出的分支,
# 同步操作无论如何都会检出你的 'target_sync_branch'
ref: my-branch
# 如果你的上游仓库是私有的,这是必需的(参见 wiki)
persist-credentials: false
# 必需步骤
# 步骤 2: 运行同步操作
- name: 同步上游变更
id: sync
uses: aormsby/Fork-Sync-With-Upstream-action@v3.4.1
with:
target_sync_branch: my-branch
# 必需 'target_repo_token' 必须完全像这样!
target_repo_token: ${{ secrets.GITHUB_TOKEN }}
upstream_sync_branch: main
upstream_sync_repo: aormsby/Fork-Sync-With-Upstream-action
upstream_repo_access_token: ${{ secrets.UPSTREAM_REPO_SECRET }}
# 在手动调度期间将 test_mode 设置为 true,以运行测试而不是真正的操作!!
test_mode: ${{ inputs.sync_test_mode }}
# 步骤 3: 根据同步输出变量 'has_new_commits' 显示示例消息
- name: 发现新的提交
if: steps.sync.outputs.has_new_commits == 'true'
run: echo "发现了需要同步的新提交。"
- name: 没有新的提交
if: steps.sync.outputs.has_new_commits == 'false'
run: echo "没有新的提交。"
- name: 显示 'has_new_commits' 的值
run: echo ${{ steps.sync.outputs.has_new_commits }}