Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mheap/github-default-branch
Rename your default branch on GitHub
https://github.com/mheap/github-default-branch
branch cli github main master rename
Last synced: about 13 hours ago
JSON representation
Rename your default branch on GitHub
- Host: GitHub
- URL: https://github.com/mheap/github-default-branch
- Owner: mheap
- License: mit
- Created: 2020-06-14T21:03:20.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-06-17T21:13:56.000Z (5 months ago)
- Last Synced: 2024-11-06T06:12:27.921Z (8 days ago)
- Topics: branch, cli, github, main, master, rename
- Language: JavaScript
- Homepage:
- Size: 439 KB
- Stars: 133
- Watchers: 3
- Forks: 10
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# GitHub Default Branch
Rename your default branch on GitHub easily. By default it renames `master` to `main`, but is configurable using the `--new` and `--old` flags.
If provided with an `--org`, `--user` or (`--org` and `--team`) arguments, it will run on all repositories owned by that org, user or team. Alternatively, you can provide a `--repo` argument to edit a single repo. See [Usage](#usage) for more examples.
For each repo, this tool will:
- Create a new branch at the same commit SHA as the old one
- Update all open pull requests to point at the new branch
- Update the default branch for the repo
- Delete the old branch
- Update [known URL patterns](https://github.com/mheap/github-default-branch/tree/main/replacements) in source files
- Update any branch protections for `$old` to `$new`. (This does **not** work with patterns, it has to be an exact match)## Installation
```shell
npm install -g github-default-branch
```## Development
```shell
git clone https://github.com/mheap/github-default-branch.git
cd github-default-branch
npm ci
```## Authentication
[Create a personal access token](https://github.com/settings/tokens/new?scopes=repo&description=github-default-branch) with the `repo` scope. This is the value for `` in the examples.
> If you don't want your token to be stored in your shell history, you can set `GITHUB_TOKEN` in the environment and that will be read instead
## Usage
```
# Rename master to main
github-default-branch --pat --repo user/repo# Rename dev to develop
github-default-branch --pat --repo user/repo --old dev --new develop# Rename all repos owned by an org
github-default-branch --pat --org my-org-name# Rename all repos owned by a user
github-default-branch --pat --user my-user# Rename all repos owned by a team
github-default-branch --pat --org my-org-name --team my-team-slug
```Set `DEBUG="ghdb*"` as an environment variable to see debug information
## Options
| Flag | Description | Default |
| ------------- | ------------------------------------------------------------------------------------------------------------ | ------- |
| --pat | GitHub API Token | N/A |
| --old | The name of the branch to rename | master |
| --new | The new branch name | main |
| --repo | The repo to update (format: user/repo) | N/A |
| --user | Update all repos owned by the provided user (example: my-user) | N/A |
| --org | Update all repos in the provided org (example: my-org-name) | N/A |
| --team | Update all repos in the provided team (example: my-team-name), only usable in combination with org parameter | N/A |
| --dry-run | Output log messages only. Do not make any changes | false |
| --skip-forks | Skips forked repositories | false |
| --confirm | Run without prompting for confirmation | false |## Skipping transforms
You might want to skip any of the available transforms (such as deleting the old branch). You can add `--skip-[transform-name]` to disable the transform e.g. `--skip-delete-old-branch`.
## Available transforms
| Transform | Description |
| ----------------------- | ----------------------------------------------------- |
| update-default-branch | Set the default branch of the repo to `$new` |
| retarget-pull-requests | Change the base for any open pull requests |
| retarget-draft-releases | Change the `target_commitish` for any draft releases |
| branch-protection | Update any branch protection rules to point at `$new` |
| delete-old-branch | Delete the `$old` branch |
| github-pages | Update GitHub Pages configuration |Pending transforms:
- Copy branch protections instead of updating if `--skip-delete-old-branch` is used ([#26](https://github.com/mheap/github-default-branch/issues/26))
- Retarget draft releases ([#30](https://github.com/mheap/github-default-branch/issues/30))## Replacements
Part of this script checks for the existence of files and updates their contents. Replacements are the mechanism for these updates.
### How it Works
Each .js file in the `replacements` folder is given a chance to run during the content updating step of the script. Each file in replacements is expected to export a function, that function receives all of the options that are available to the outmost script.
If there is nothing to replace, then the script moves on to the next replacement.
### How to Add a Replacement
Add a file to `replacements` with a .js extension
Like this:
```javascript
module.exports = function ({
owner, // string - repo owner
repo, // string - repo name
old, // string - old branch name
target, // string - new branch name
octokit, // Octokit - oktokit instance
verbose, // boolean - verbose flag
isDryRun, // boolean - dry run flag
}) {
// code goes here
return {
path: "",
replacements: [
{
from: "",
to: "",
},
{
from: "",
to: "",
},
],
};
};
```The file with the path in your repo will have any line matching `from` be swapped out with `to`