Can forks be synced automatically in gitHub?

前端 未结 5 2066
傲寒
傲寒 2020-12-12 15:09

Stash enables automatic fork syncing if selected: https://confluence.atlassian.com/display/STASH/Keeping+forks+synchronized
It will update any branches in your fork that

相关标签:
5条回答
  • 2020-12-12 15:37

    You could define a webhook to listen to upstream (the original repo) changes, and update your fork.

    In June 2016, you had the service backstroke.us which listens to those events for you. No need to write your own listener.
    See 1egoman/backstroke

    But, as commented by chriszo111, in 2020, that would be wei/pull

    a GitHub App built with probot that keeps your forks up-to-date with upstream via automated pull requests.

    0 讨论(0)
  • 2020-12-12 15:45

    You can import any public GitHub repository into GitLab, with an option to mirror future commits. You can do it with a few clicks. It's a great workflow for internal forks.

    0 讨论(0)
  • 2020-12-12 15:52

    You can create a Github App that use Github API to check the upstream repo periodically. Once an update is found, use Github API to create a pull request then call updateRef to update your branch to match master.

    Or, just install this Github App that does exactly that

    https://github.com/wei/pull

    0 讨论(0)
  • 2020-12-12 15:56

    For the record, recently I ran into this same problem and addressed it with Github Actions. The solution is rather easy: an scheduled action fetches the upstream repository and merges it into mine.

    # .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
    
    

    I run it every Sunday which is more than enough for me. Just schedule this to whatever is fine for you.

    Also, it is probably wiser to sync every branch in a different job since they will run in parallel and can independently succeed or fail if conflicts occur.

    If you need to merge an arbitrary number of branches, you can refer to questions like How to fetch all Git branches to find shell tricks to do it.

    I noticed a public action exists to address this by rebasing. It looked promising but it was fairly undocumented so here is my snippet instead. Hope it helps!

    0 讨论(0)
  • 2020-12-12 15:56

    With GitHub alone, you cannot sync forks automatically. You can, however, sync forks manually.

    You could also use the GitHub API to write a bot that syncs forks whenever upstream repositories are updated.

    0 讨论(0)
提交回复
热议问题