aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 94a107cde51aa9ec18729e6c4cd3258f11e1da77 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# 🍰 Mugi

> Personal **Mu**lti-**Gi**t (or Tsu**mugi** Kotobuki, if you will) Remote Manager

Mugi keeps your repositories in sync across multiple Git remotes (GitHub, Codeberg, SourceHut, etc.)
with a single command.

Mugi is written in [Go](https://go.dev) and uses [Bubble Tea](https://github.com/charmbracelet/bubbletea)
for its terminal interface.

## Usage

```bash
mugi pull                      # Pull all repos from all remotes
mugi pull windmark             # Pull Windmark from all remotes
mugi push windmark gh cb       # Push Windmark to GitHub and Codeberg
mugi fetch gemrest/september   # Fetch specific repository
```

<br>
<p align="center"><img src="./assets/example_output.png" alt="Example Output Screenshot" width="50%"></p>

### Installation

```bash
go install github.com/Fuwn/mugi/cmd/mugi@main
```

or

```bash
git clone https://github.com/Fuwn/mugi.git
cd mugi
go build -o mugi ./cmd/mugi
mv mugi ~/.local/bin/  # or anywhere in your PATH
```

### Configuration

Mugi uses a YAML config file at `~/.config/mugi/config.yaml`:

```yaml
remotes:
  github:
    aliases: [gh]
    url: [email protected]:${user}/${repo}.git
  codeberg:
    aliases: [cb]
    url: [email protected]:${user}/${repo}.git
  sourcehut:
    aliases: [sh]
    url: [email protected]:~fuwn/${repo}

defaults:
  remotes: [github, codeberg, sourcehut]
  path_prefix: ~/Developer

repos:
  gemrest/windmark:
  gemrest/september:
```

### `--help`

```
Mugi - Personal Multi-Git Remote Manager

Usage:
  mugi [flags] <command> [repo] [remotes...]

Commands:
  pull    Pull from remote(s)
  push    Push to remote(s)
  fetch   Fetch from remote(s)
  help    Show this help
  version Show version

Flags:
  -c, --config <path>  Override config file path
  -V, --verbose        Show detailed output

Examples:
  mugi pull                      Pull all repositories from all remotes
  mugi pull windmark             Pull Windmark from all remotes
  mugi pull windmark github      Pull Windmark from GitHub only
  mugi push windmark gh cb       Push Windmark to GitHub and Codeberg
  mugi fetch gemrest/september   Fetch specific repository
  mugi -c ./test.yaml pull       Use custom config
```

## Licence

Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or
[MIT license](LICENSE-MIT) at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.