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

时间:2014-05-21 20:23:15

标签: github git-fork

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

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

5 个答案:

答案 0 :(得分:26)

您可以定义 webhook 来收听上游(原始回购)的更改,并更新您的前叉。

2016年6月,您现在拥有了为您监听这些事件的服务backstroke.us。不需要写自己的听众 见1egoman/backstroke

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

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

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

答案 1 :(得分:19)

记录下来,最近我遇到了同样的问题,并用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

我每个星期日都运行它,对我来说已经足够了。只要安排好适合您的时间即可。

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

如果您需要合并任意数量的分支,则可以参考诸如How to fetch all Git branches之类的问题来找到实现此目的的技巧。

我注意到有一项公共行动可以通过重新定基来解决。它看起来很有希望,但是还没有文件证明,所以这里是我的摘录。希望对您有帮助!

答案 2 :(得分:5)

单独使用GitHub,您无法自动同步分叉。但是,您可以sync forks manually

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

答案 3 :(得分:1)

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

或者,只需安装此功能的Github应用

x.valueOf

GitHub App,通过上游更改使您的存储库保持最新。

答案 4 :(得分:0)

您可以将任何公共GitHub存储库导入到GitLab中,并可以选择镜像将来的提交。只需单击几下即可。这是内部分叉的绝佳工作流程。