Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/repo-sync/github-sync

⤵️ A GitHub Action for syncing current repository with remote
https://github.com/repo-sync/github-sync

action fork github-action sync

Last synced: about 2 months ago
JSON representation

⤵️ A GitHub Action for syncing current repository with remote

Awesome Lists containing this project

README

        

# GitHub Sync

[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)

A GitHub Action for syncing the current repository using **force push**.

## Features
* Sync branches between two GitHub repositories
* Sync branches from a remote repository
* GitHub action can be triggered on a timer or on push
* To push to a remote repository, please checkout [git-sync](https://github.com/marketplace/actions/git-sync-action)
* Support syncing tags.

## Usage

Create a personal access token and add to repository's secret as `PAT`

### GitHub Actions
```
# File: .github/workflows/repo-sync.yml

on:
schedule:
- cron: "*/15 * * * *"
workflow_dispatch:

jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: repo-sync
uses: repo-sync/github-sync@v2
with:
source_repo: ""
source_branch: ""
destination_branch: ""
github_token: ${{ secrets.PAT }}
```
If `source_repo` is private or with another provider, either (1) use an authenticated HTTPS repo clone url like `https://${access_token}@github.com/owner/repository.git` or (2) set a `SSH_PRIVATE_KEY` secret environment variable and use the SSH clone url

### Workflow overwriting

If `destination_branch` and the branch where you will create this workflow will be the same, The workflow (and all files) will be overwritten by `source_branch` files. A potential solution is: Create a new branch with the actions file and make it the default branch.

## Advanced Usage: Sync all branches
1. Make a backup
2. Create a new branch in your repo (destination repo), it should not share the name with any branch in source repo
3. Make the new branch the default branch under repo settings
4. Use `*` for both `source_branch` and `destination_branch`
5. Optionally, you can force sync all tags:
```
with:
sync_tags: "true"
```
This will force sync ALL branches to match source repo. Branches that are created only in the destination repo will not be affected but all the other branches will be *hard reset* to match source repo. ⚠️ This does mean if upstream ever creates a branch that shares the name, your changes will be gone.

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



Wei He

💻 📖 🎨 🤔

Zeke Sikelianos

📖 🤔

Alex Page

🐛

xtqqczze

💻 📖

Kay Harrison-Sims

🐛

Gibby

💻

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!