叉子可以在gitHub中自动同步吗?

Mal*_*ina 30 github git-fork

Stash启用自动fork同步(如果选择):https : //confluence.atlassian.com/display/STASH/Keeping+forks+synchronized
它将更新fork中未修改的任何分支.

我一直无法在gitHub中找到类似的自动功能; 所有谷歌搜索都通过本地缓存以手动方式同步分叉.

N1n*_*ngu 35

作为记录,最近我遇到了同样的问题,并通过 Github Actions 解决了它。解决方案相当简单:一个预定的动作获取上游存储库并将其合并到我的存储库中。

# .github/workflows/example.yml

name: Merge upstream branches
on:
  schedule:
     # actually, ~5 minutes is the highest
     # effective frequency you will get
    - cron:  '* * * * *'
jobs:
  merge:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Merge upstream
        run: |
          git config --global user.name 'your-name'
          git config --global user.email 'your-username@users.noreply.github.com'

          # "git checkout master" is unnecessary, already here by default
          git pull --unshallow  # this option is very important, you would get
                                # complains about unrelated histories without it.
                                # (but actions/checkout@v2 can also be instructed
                                # to fetch all git depth right from the start)

          git remote add upstream https://github.com/example/test.git
          git fetch upstream

          # Neither forget the -b opt,
          # the feature/x ref is ambiguous at this stage
          git checkout -b feature/x origin/feature/x
          git merge --no-edit upstream/feature/x
          git push origin feature/x

          git checkout master
          git merge --no-edit upstream/master
          git push origin master

          # etc

Run Code Online (Sandbox Code Playgroud)

我每个星期天都运行它,这对我来说已经足够了。只需将其安排为适合您的任何方式即可。

此外,在不同的作业中同步每个分支可能更明智,因为它们将并行运行,并且在发生冲突时可以独立成功或失败。

如果你需要合并任意数量的分支,你可以参考诸如如何获取所有 Git 分支以查找 shell 技巧之类的问题。

我注意到有一项公共行动可以通过变基来解决这个问题。它看起来很有希望,但它是相当无证的,所以这里是我的片段。希望能帮助到你!

  • 顺便说一句,如果您不想公开每个存储库的凭据或配置,现在有一个很好的 Github 应用程序:https://github.com/apps/pull (5认同)
  • 好的。GitHub 操作肯定比我的 webhook 答案更新。已投赞成票。 (2认同)

Von*_*onC 28

您可以定义一个webhook来监听上游(原始仓库)的更改,并更新您的fork.

2016年6月,您现在backstroke.us可以获得为您监听这些活动的服务.无需编写自己的监听器.
1egoman /仰泳

  1. 在fork或上游存储库中创建webhook.(Settings => Webhooks&Services => Add Webhook)
  2. 添加http://backstroke.us作为有效负载网址.
  3. 将一些代码推送到上游存储库以查看Backstroke的运行情况.

https://raw.githubusercontent.com/1egoman/backstroke/master/assets/map.png

在您的情况下,您需要说服上游仓库的维护者(您已经分叉的那个)来注册该backstrokewebhook.
您将看到PR(拉动请求)自动出现在您的前叉上,供您接受(让您与原始回购方进行的任何演变保持同步).

  • 仰泳已经结束,创建者链接到类似的方法,例如 https://github.com/wei/pull ,这些方法似乎正在积极维护,也在 /sf/answers/3830294261/ 中提到 (3认同)
  • @Vadorequest 有趣。当然,在 2020/2021 年,您现在可以使用 GitHub Action 方法,例如 https://github.com/marketplace/actions/fork-sync (2认同)

Nic*_*rdy 5

仅使用GitHub,您无法自动同步分叉.但是,您可以手动同步货盘.

您还可以使用GitHub API编写一个机器人,以便在更新上游存储库时同步分叉.


ddh*_*hhz 5

您可以创建一个使用Github API的Github应用,以定期检查上游仓库。找到更新后,请使用Github API创建提取请求,然后调用updateRef更新分支以匹配主节点。

或者,只需安装此Github应用即可

https://github.com/wei/pull

一个GitHub应用程序,可通过上游更改使您的存储库保持最新状态。

  • @Gendarme 原始海报说“所有谷歌搜索都在使用手动方式来同步分叉”,并要求采用自动方式来做到这一点。我稍微更新了答案以使其更清楚。 (4认同)