@getsolaris/oh-my-worktree 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ko.md +833 -0
- package/README.md +851 -0
- package/dist/omw.js +221 -0
- package/package.json +36 -0
package/README.ko.md
ADDED
|
@@ -0,0 +1,833 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./banner.png" alt="oh-my-worktree" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# ๐ณ oh-my-worktree
|
|
6
|
+
|
|
7
|
+
[English](./README.md) | **ํ๊ตญ์ด**
|
|
8
|
+
|
|
9
|
+
> Git worktree ๋งค๋์ โ oh-my-* ํจ๋ฐ๋ฆฌ์์ ์๊ฐ์ ๋ฐ์ ํฐ๋ฏธ๋ UI
|
|
10
|
+
|
|
11
|
+
Git worktree๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ์ธ์. ์ค์ ๊ธฐ๋ฐ ์๋ํ, ๋ชจ๋
ธ๋ ํฌ ์ง์, ํฌ์ค ์ฒดํฌ๋ก worktree๋ฅผ ์์ฑ, ์ ํ, ์ ๋ฆฌํ ์ ์์ต๋๋ค.
|
|
12
|
+
|
|
13
|
+
## ์ฃผ์ ๊ธฐ๋ฅ
|
|
14
|
+
|
|
15
|
+
- **TUI ๋ชจ๋** โ ์ธํฐ๋ํฐ๋ธ ํฐ๋ฏธ๋ UI (`omw`)
|
|
16
|
+
- **CLI ๋ชจ๋** โ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ปค๋งจ๋ (`omw add`, `omw list` ๋ฑ)
|
|
17
|
+
- **์ค์ ๊ธฐ๋ฐ** โ ๋ ํฌ๋ณ ํ
, ํ์ผ ๋ณต์ฌ, ์ฌ๋ณผ๋ฆญ ๋งํฌ
|
|
18
|
+
- **๋ชจ๋
ธ๋ ํฌ ์ง์** โ ํจํค์ง ์๋ ๊ฐ์ง, ํจํค์ง๋ณ ํ
, ํฌ์ปค์ค ์ถ์
|
|
19
|
+
- **ํฌ์ค ์ฒดํฌ** โ `omw doctor`๋ก worktree ๋ฌธ์ ์ง๋จ
|
|
20
|
+
- **์ค์ ์ง์ค์ worktree** โ ๊ธฐ๋ณธ์ ์ผ๋ก `~/.omw/worktrees/`์ ๋ชจ๋ worktree ๊ด๋ฆฌ
|
|
21
|
+
- **์ค๋งํธ ์ ๋ฆฌ** โ ๋จธ์ง๋ worktree ์๋ ๊ฐ์ง ๋ฐ ์ ๊ฑฐ
|
|
22
|
+
- **ํ
๋ง** โ 6๊ฐ์ง ๋ด์ฅ ์ปฌ๋ฌ ํ
๋ง (OpenCode, Tokyo Night, Dracula, Nord, Catppuccin, GitHub Dark)
|
|
23
|
+
- **ํ
ํ๋ฆฟ** โ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ worktree ํ๋ฆฌ์
(`omw add --template review`)
|
|
24
|
+
- **ํฌ๋ก์ค worktree ์คํ** โ ๋ชจ๋ worktree์์ ๋ช
๋ น ์คํ (`omw exec "bun test"`)
|
|
25
|
+
- **GitHub PR ์ฐ๋** โ PR์์ worktree ์์ฑ (`omw add --pr 123`)
|
|
26
|
+
- **ํผ์ง ๋ธ๋์น ํผ์ปค** โ TUI์์ ํ์ดํํ๋ฉด ๋ธ๋์น ์๋์์ฑ
|
|
27
|
+
- **๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ** โ ๋นํ์ฑ/๋จธ์ง๋ worktree ์๋ ๊ฐ์ง, ์ ํ ์ค์
|
|
28
|
+
- **์์กด์ฑ ๊ณต์ ** โ `node_modules` ๋ฑ์ ํ๋๋งํฌ/์ฌ๋ณผ๋ฆญ์ผ๋ก ๋์คํฌ ์ ์ฝ
|
|
29
|
+
- **Worktree ๋น๊ต** โ worktree ๊ฐ ๋ณ๊ฒฝ์ฌํญ ๋น๊ต (`omw diff feature/a feature/b`)
|
|
30
|
+
- **ํ ๋ณดํธ** โ worktree๋ฅผ ์๋ ์ ๋ฆฌ์์ ๋ณดํธ (`omw pin`)
|
|
31
|
+
- **ํ๋ ๋ก๊ทธ** โ ์์ฑ/์ญ์ /์ ํ/๋ฆฌ๋ค์/์์นด์ด๋ธ/์ํฌํธ ์ด๋ฒคํธ ์ถ์ (`omw log`)
|
|
32
|
+
- **์์นด์ด๋ธ** โ ์ ๊ฑฐ ์ worktree ๋ณ๊ฒฝ์ฌํญ์ ํจ์น๋ก ๋ณด์กด (`omw archive`)
|
|
33
|
+
- **๋ธ๋์น ๋ฆฌ๋ค์** โ ๋ฉํ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
๊ณผ ํจ๊ป worktree ๋ธ๋์น ์ด๋ฆ ๋ณ๊ฒฝ (`omw rename`)
|
|
34
|
+
- **ํด๋ก ๋ฐ ์ด๊ธฐํ** โ omw ์ค์ ๊ณผ ํจ๊ป ๋ ํฌ ํด๋ก (`omw clone`)
|
|
35
|
+
- **Worktree ์ํฌํธ** โ ์๋ ์์ฑ๋ worktree ์ฑํ (`omw import`)
|
|
36
|
+
- **์์ธ ๋ทฐ** โ ์ปค๋ฐ ํ์คํ ๋ฆฌ, diff ํต๊ณ, upstream ์ํ ํ์ธ (TUI)
|
|
37
|
+
- **์ผ๊ด ์์
** โ ๋ค์ค ์ ํ ๋ฐ ๋ฐฐ์น ์์
(TUI)
|
|
38
|
+
- **ํ ์คํธ ์๋ฆผ** โ ๋น๋๊ธฐ ์์
๊ฒฐ๊ณผ ์๋ฆผ (TUI)
|
|
39
|
+
- **์
ธ ์๋์์ฑ** โ bash/zsh/fish ํญ ์๋์์ฑ (`omw shell-init --completions`)
|
|
40
|
+
- **์ค์ ํ๋กํ** โ ์ค์ ์ธํธ ์ ํ (`omw config --profiles`)
|
|
41
|
+
- **Tmux ์ธ์
** โ worktree๋ณ tmux ์ธ์
์๋ ์์ฑ/์ข
๋ฃ, ๋ ์ด์์ ํ
ํ๋ฆฟ (`omw session`)
|
|
42
|
+
- **AI ์์ด์ ํธ ์ด๊ธฐํ** โ ๊ธฐ๋ณธ ์ค์ ํ์ผ ์์ฑ ๋๋ Claude Code, Codex, OpenCode์ฉ ์คํฌ ์ค์น (`omw init`, `omw init --skill`)
|
|
43
|
+
|
|
44
|
+
## ์๊ตฌ์ฌํญ
|
|
45
|
+
|
|
46
|
+
- [Bun](https://bun.sh) ๋ฐํ์
|
|
47
|
+
- git 2.17+
|
|
48
|
+
- macOS ๋๋ Linux
|
|
49
|
+
- [gh CLI](https://cli.github.com) (์ ํ์ฌํญ, `--pr` ํ๋๊ทธ์ฉ)
|
|
50
|
+
- [tmux](https://github.com/tmux/tmux) (์ ํ์ฌํญ, `omw session`์ฉ)
|
|
51
|
+
|
|
52
|
+
## ์ค์น
|
|
53
|
+
|
|
54
|
+
### Homebrew (macOS/Linux)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
brew install getsolaris/tap/oh-my-worktree
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### curl (์๋ผ์ด๋)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl -fsSL https://raw.githubusercontent.com/getsolaris/oh-my-worktree/main/install.sh | bash
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### npm / bun
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
bun install -g @getsolaris/oh-my-worktree
|
|
70
|
+
# or
|
|
71
|
+
npm install -g @getsolaris/oh-my-worktree
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## ๋น ๋ฅธ ์์
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# TUI ์คํ
|
|
78
|
+
omw
|
|
79
|
+
|
|
80
|
+
# worktree ๋ชฉ๋ก
|
|
81
|
+
omw list
|
|
82
|
+
|
|
83
|
+
# ์ worktree ์์ฑ
|
|
84
|
+
omw add feature/my-feature
|
|
85
|
+
|
|
86
|
+
# ๋ชจ๋
ธ๋ ํฌ ํฌ์ปค์ค์ ํจ๊ป ์์ฑ
|
|
87
|
+
omw add feature/my-feature --focus apps/web,apps/api
|
|
88
|
+
|
|
89
|
+
# GitHub PR์์ ์์ฑ
|
|
90
|
+
omw add --pr 123
|
|
91
|
+
|
|
92
|
+
# ํ
ํ๋ฆฟ ์ฌ์ฉ
|
|
93
|
+
omw add feature/login --template review
|
|
94
|
+
|
|
95
|
+
# ๋ชจ๋ worktree์์ ๋ช
๋ น ์คํ
|
|
96
|
+
omw exec "bun test"
|
|
97
|
+
|
|
98
|
+
# ๋ worktree ๋น๊ต
|
|
99
|
+
omw diff feature/a feature/b --stat
|
|
100
|
+
|
|
101
|
+
# ํฌ์ค ์ฒดํฌ
|
|
102
|
+
omw doctor
|
|
103
|
+
|
|
104
|
+
# worktree ์ ํ (์
ธ ํตํฉ ํ์)
|
|
105
|
+
omw switch feature/my-feature
|
|
106
|
+
|
|
107
|
+
# worktree ์ ๊ฑฐ
|
|
108
|
+
omw remove feature/my-feature --yes
|
|
109
|
+
|
|
110
|
+
# ๋จธ์ง๋ worktree ์ ๋ฆฌ
|
|
111
|
+
omw clean --dry-run
|
|
112
|
+
|
|
113
|
+
# worktree ํ ์ค์ (์ ๋ฆฌ์์ ๋ณดํธ)
|
|
114
|
+
omw pin feature/important --reason "active sprint"
|
|
115
|
+
|
|
116
|
+
# ํ๋ ๋ก๊ทธ ๋ณด๊ธฐ
|
|
117
|
+
omw log
|
|
118
|
+
|
|
119
|
+
# worktree ์์นด์ด๋ธ ํ ์ ๊ฑฐ
|
|
120
|
+
omw archive feature/done --yes
|
|
121
|
+
|
|
122
|
+
# worktree ๋ธ๋์น ๋ฆฌ๋ค์
|
|
123
|
+
omw rename old-name new-name
|
|
124
|
+
|
|
125
|
+
# ๋ ํฌ ํด๋ก ๋ฐ omw ์ด๊ธฐํ
|
|
126
|
+
omw clone https://github.com/user/repo.git
|
|
127
|
+
|
|
128
|
+
# ๊ธฐ์กด worktree ์ํฌํธ
|
|
129
|
+
omw import /path/to/worktree
|
|
130
|
+
|
|
131
|
+
# worktree์ tmux ์ธ์
์ด๊ธฐ/์ฐ๊ฒฐ
|
|
132
|
+
omw session feature/my-feature
|
|
133
|
+
|
|
134
|
+
# tmux ์ธ์
๊ณผ ํจ๊ป worktree ์์ฑ
|
|
135
|
+
omw add feature/new --session
|
|
136
|
+
|
|
137
|
+
# ์ค์ ํ์ผ ์ด๊ธฐํ
|
|
138
|
+
omw init
|
|
139
|
+
|
|
140
|
+
# AI ์์ด์ ํธ ์คํฌ ํ์ผ ์์ฑ
|
|
141
|
+
omw init --skill claude-code
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## TUI ์ฌ์ฉ๋ฒ
|
|
145
|
+
|
|
146
|
+
`omw` (์ธ์ ์์ด)๋ก ์คํํฉ๋๋ค.
|
|
147
|
+
|
|
148
|
+
### ํค๋ณด๋ ๋จ์ถํค
|
|
149
|
+
|
|
150
|
+
| ํค | ๋์ |
|
|
151
|
+
|----|------|
|
|
152
|
+
| `j` / `k` | worktree ๋ชฉ๋ก ํ์ |
|
|
153
|
+
| `a` | worktree ์ถ๊ฐ |
|
|
154
|
+
| `d` | worktree ์ญ์ |
|
|
155
|
+
| `h` | Doctor (ํฌ์ค ์ฒดํฌ) |
|
|
156
|
+
| `r` | ๋ชฉ๋ก ์๋ก๊ณ ์นจ |
|
|
157
|
+
| `Ctrl+P` | ์ปค๋งจ๋ ํ๋ ํธ |
|
|
158
|
+
| `Enter` | ์์ธ ๋ทฐ ์ด๊ธฐ |
|
|
159
|
+
| `Escape` | ์์ธ ๋ทฐ ๋ซ๊ธฐ |
|
|
160
|
+
| `Space` | worktree ์ ํ ํ ๊ธ |
|
|
161
|
+
| `Ctrl+A` | ๋ชจ๋ worktree ์ ํ |
|
|
162
|
+
| `x` | ์ผ๊ด ์์
๋ฉ๋ด |
|
|
163
|
+
| `?` | ๋์๋ง |
|
|
164
|
+
| `q` | ์ข
๋ฃ |
|
|
165
|
+
|
|
166
|
+
### ์ปค๋งจ๋ ํ๋ ํธ (`Ctrl+P`)
|
|
167
|
+
|
|
168
|
+
๊ฒ์ ๊ฐ๋ฅํ ์ปค๋งจ๋ ๋ฉ๋ด:
|
|
169
|
+
- worktree ์ถ๊ฐ / ์ญ์ / ์๋ก๊ณ ์นจ
|
|
170
|
+
- Doctor ์คํ
|
|
171
|
+
- ์ค์ ์ด๊ธฐ
|
|
172
|
+
- ํ
๋ง ๋ณ๊ฒฝ
|
|
173
|
+
- ์ข
๋ฃ
|
|
174
|
+
|
|
175
|
+
ํ์ดํ์ผ๋ก ํํฐ, `โโ`์ผ๋ก ํ์, `Enter`๋ก ์คํ, `Esc`๋ก ๋ซ๊ธฐ.
|
|
176
|
+
|
|
177
|
+
### Worktree ์์ฑ ํ๋ฆ
|
|
178
|
+
|
|
179
|
+
1. `a`๋ฅผ ๋๋ฌ ์์ฑ ๋ทฐ ์ด๊ธฐ
|
|
180
|
+
2. ๋ธ๋์น๋ช
์
๋ ฅ ์์ โ ํ์ดํํ๋ฉด ๋งค์นญ๋๋ ๋ธ๋์น๊ฐ ํ์๋จ
|
|
181
|
+
3. `โโ`์ผ๋ก ์ถ์ฒ ๋ธ๋์น ์ ํ, ๋๋ ๊ณ์ ์
๋ ฅํ์ฌ ์ ๋ธ๋์น ์์ฑ
|
|
182
|
+
4. `Tab`์ผ๋ก Focus ํ๋ ์ ํ (์ ํ์ฌํญ)
|
|
183
|
+
5. ํฌ์ปค์ค ๊ฒฝ๋ก ์
๋ ฅ (์: `apps/web,apps/api`)
|
|
184
|
+
6. `Enter`๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ
|
|
185
|
+
7. `Enter`๋ก ํ์ธ
|
|
186
|
+
|
|
187
|
+
ํผ์ง ๋ธ๋์น ํผ์ปค๋ ๋ก์ปฌ/๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ ๋ง์ง๋ง ์ปค๋ฐ ๋ ์ง ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ค์๊ฐ ํํฐ๋งํฉ๋๋ค.
|
|
188
|
+
|
|
189
|
+
์์ฑ ํ ์ค์ ๋ `copyFiles`, `linkFiles`, `postCreate` ํ
, ๋ชจ๋
ธ๋ ํฌ ํ
์ด ์๋์ผ๋ก ์คํ๋ฉ๋๋ค.
|
|
190
|
+
|
|
191
|
+
### Doctor ๋ทฐ
|
|
192
|
+
|
|
193
|
+
`h`๋ฅผ ๋๋ฌ Doctor ํญ์ ์ฝ๋๋ค. ํฌ์ค ์ฒดํฌ ๊ฒฐ๊ณผ ํ์:
|
|
194
|
+
- โ Git ๋ฒ์ ํ์ธ
|
|
195
|
+
- โ ์ค์ ์ ํจ์ฑ ๊ฒ์ฆ
|
|
196
|
+
- โ ๋นํ์ฑ worktree ๊ฐ์ง
|
|
197
|
+
- โ ๊ณ ์ ๋๋ ํ ๋ฆฌ ๊ฐ์ง
|
|
198
|
+
- โ ์ ๊ธ ์ํ ํ์ธ
|
|
199
|
+
- โ ๋ํฐ worktree ๊ฐ์ง
|
|
200
|
+
|
|
201
|
+
`r`๋ก ์ฌํ์ธ, `Esc`๋ก ๋์๊ฐ๊ธฐ.
|
|
202
|
+
|
|
203
|
+
## CLI ์ปค๋งจ๋
|
|
204
|
+
|
|
205
|
+
| ์ปค๋งจ๋ | ์ค๋ช
|
|
|
206
|
+
|--------|------|
|
|
207
|
+
| `omw` | TUI ์คํ |
|
|
208
|
+
| `omw list` | ๋ชจ๋ worktree ๋ชฉ๋ก (ํฌ์ปค์ค ์ ๋ณด ํฌํจ) |
|
|
209
|
+
| `omw add <branch>` | worktree ์์ฑ |
|
|
210
|
+
| `omw remove <branch>` | worktree ์ ๊ฑฐ |
|
|
211
|
+
| `omw switch <branch>` | worktree ์ ํ |
|
|
212
|
+
| `omw clean` | ๋จธ์ง๋ worktree ์ ๊ฑฐ |
|
|
213
|
+
| `omw doctor` | worktree ํฌ์ค ์ฒดํฌ |
|
|
214
|
+
| `omw config` | ์ค์ ๊ด๋ฆฌ |
|
|
215
|
+
| `omw exec <command>` | ๊ฐ worktree์์ ๋ช
๋ น ์คํ |
|
|
216
|
+
| `omw diff <ref1> [ref2]` | worktree/๋ธ๋์น ๊ฐ diff |
|
|
217
|
+
| `omw pin <branch>` | worktree ํ/์ธํ (์ ๋ฆฌ์์ ๋ณดํธ) |
|
|
218
|
+
| `omw log` | worktree ํ๋ ๋ก๊ทธ ๋ณด๊ธฐ |
|
|
219
|
+
| `omw archive <branch>` | ๋ณ๊ฒฝ์ฌํญ ์์นด์ด๋ธ ํ ์ ํ์ ์ ๊ฑฐ |
|
|
220
|
+
| `omw rename <old> <new>` | worktree ๋ธ๋์น ๋ฆฌ๋ค์ |
|
|
221
|
+
| `omw clone <url>` | ๋ ํฌ ํด๋ก ๋ฐ omw ์ด๊ธฐํ |
|
|
222
|
+
| `omw import <path>` | omw ๋ฉํ๋ฐ์ดํฐ๋ก worktree ์ฑํ |
|
|
223
|
+
| `omw session [branch]` | worktree์ tmux ์ธ์
๊ด๋ฆฌ |
|
|
224
|
+
| `omw init` | ์ค์ ์ด๊ธฐํ ๋๋ AI ์์ด์ ํธ ์คํฌ ์ค์น |
|
|
225
|
+
|
|
226
|
+
### `omw add`
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
omw add feature/login # ํ์ํ๋ฉด ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ worktree ์์ฑ
|
|
230
|
+
omw add feature/login --base main # ์ ๋ธ๋์น๋ main์์ ์์
|
|
231
|
+
omw add existing-branch # ๊ธฐ์กด ๋ธ๋์น๋ก worktree ์์ฑ
|
|
232
|
+
|
|
233
|
+
# ๋ชจ๋
ธ๋ ํฌ: ํฌ์ปค์ค ํจํค์ง์ ํจ๊ป ์์ฑ
|
|
234
|
+
omw add feature/login --focus apps/web,apps/api
|
|
235
|
+
omw add feature/login --focus apps/web --focus apps/api
|
|
236
|
+
|
|
237
|
+
# ํ
ํ๋ฆฟ ์ฌ์ฉ
|
|
238
|
+
omw add feature/login --template review
|
|
239
|
+
|
|
240
|
+
# GitHub PR์์ ์์ฑ (gh CLI ํ์)
|
|
241
|
+
omw add --pr 123
|
|
242
|
+
omw add --pr 456 --template review
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### `omw doctor`
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
omw doctor # ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ์ถ๋ ฅ
|
|
249
|
+
omw doctor --json # ์คํฌ๋ฆฝํ
์ฉ JSON ์ถ๋ ฅ
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
์ข
๋ฃ ์ฝ๋: ์ ์์ด๋ฉด `0`, ๊ฒฝ๊ณ ๋๋ ์๋ฌ๊ฐ ์์ผ๋ฉด `1`.
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
oh-my-worktree doctor
|
|
256
|
+
|
|
257
|
+
โ Git version: 2.39.0 (>= 2.17 required)
|
|
258
|
+
โ Configuration: valid
|
|
259
|
+
โ Stale worktrees: none
|
|
260
|
+
โ Orphaned directories: none
|
|
261
|
+
โ Worktree locks: all clear
|
|
262
|
+
โ Dirty worktrees: none
|
|
263
|
+
|
|
264
|
+
All checks passed.
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### `omw list`
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
omw list # Focus ์ปฌ๋ผ์ด ํฌํจ๋ ํ
์ด๋ธ
|
|
271
|
+
omw list --json # ํฌ์ปค์ค ๋ฐฐ์ด์ด ํฌํจ๋ JSON
|
|
272
|
+
omw list --porcelain # ๋จธ์ ํ๋
๊ฐ๋ฅ ํ์
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
๋ชจ๋
ธ๋ ํฌ worktree๋ณ ํฌ์ปค์ค ๊ฒฝ๋ก๋ฅผ `Focus` ์ปฌ๋ผ์ ํ์ํฉ๋๋ค.
|
|
276
|
+
|
|
277
|
+
### `omw remove`
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
omw remove feature/login # ๋ธ๋์น๋ช
์ผ๋ก ์ ๊ฑฐ
|
|
281
|
+
omw remove feature/login --force # ๊ฐ์ ์ ๊ฑฐ (๋ํฐ worktree)
|
|
282
|
+
omw remove feature/login --yes # ํ์ธ ๊ฑด๋๋ฐ๊ธฐ
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### `omw clean`
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
omw clean --dry-run # ์ ๊ฑฐ๋ ํญ๋ชฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
|
|
289
|
+
omw clean # ๋จธ์ง๋ worktree ๋ชจ๋ ์ ๊ฑฐ
|
|
290
|
+
omw clean --stale # ๋นํ์ฑ worktree๋ ํ์ (lifecycle ์ค์ ์ฌ์ฉ)
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### `omw exec`
|
|
294
|
+
|
|
295
|
+
๋ชจ๋ ๋น-๋ฉ์ธ worktree์์ ์
ธ ์ปค๋งจ๋๋ฅผ ์คํํฉ๋๋ค.
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
omw exec "bun test" # ๋ชจ๋ worktree์์ ์คํ (์์ฐจ)
|
|
299
|
+
omw exec "bun test" --parallel # ๋ณ๋ ฌ ์คํ
|
|
300
|
+
omw exec "git pull" --all # ๋ชจ๋ ์ค์ ๋ ๋ ํฌ์์ ์คํ
|
|
301
|
+
omw exec "bun install" --dirty # ๋ํฐ worktree๋ง
|
|
302
|
+
omw exec "git rebase main" --behind # upstream๋ณด๋ค ๋ค์ฒ์ง ๊ฒ๋ง
|
|
303
|
+
omw exec "bun test" --json # JSON ์ถ๋ ฅ
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
| ํ๋๊ทธ | ์ค๋ช
|
|
|
307
|
+
|--------|------|
|
|
308
|
+
| `--parallel` / `-p` | ๋ณ๋ ฌ ์คํ |
|
|
309
|
+
| `--all` / `-a` | ๋ชจ๋ ์ค์ ๋ ๋ ํฌ ํฌํจ |
|
|
310
|
+
| `--dirty` | ๋ํฐ worktree์์๋ง ์คํ |
|
|
311
|
+
| `--clean` | ํด๋ฆฐ worktree์์๋ง ์คํ |
|
|
312
|
+
| `--behind` | upstream๋ณด๋ค ๋ค์ฒ์ง worktree์์๋ง ์คํ |
|
|
313
|
+
| `--json` / `-j` | ๊ฒฐ๊ณผ๋ฅผ JSON์ผ๋ก ์ถ๋ ฅ |
|
|
314
|
+
|
|
315
|
+
์ปค๋งจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ฒฝ๋ณ์: `OMW_BRANCH`, `OMW_WORKTREE_PATH`, `OMW_REPO_PATH`.
|
|
316
|
+
|
|
317
|
+
### `omw diff`
|
|
318
|
+
|
|
319
|
+
๋ worktree ๋ธ๋์น ๊ฐ diff๋ฅผ ๋ณด์ฌ์ค๋๋ค.
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
omw diff feature/a feature/b # ์ ์ฒด diff
|
|
323
|
+
omw diff feature/a feature/b --stat # diffstat ์์ฝ
|
|
324
|
+
omw diff feature/a --name-only # ๋ณ๊ฒฝ๋ ํ์ผ๋ช
๋ง
|
|
325
|
+
omw diff feature/a # ํ์ฌ HEAD์ ๋น๊ต
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### `omw pin`
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
omw pin feature/auth --reason "active sprint" # ์ฌ์ ์ ํจ๊ป ํ
|
|
332
|
+
omw pin --list # ํ๋ worktree ๋ชฉ๋ก
|
|
333
|
+
omw pin --list --json # JSON ์ถ๋ ฅ
|
|
334
|
+
omw unpin feature/auth # ์ธํ
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
ํ๋ worktree๋ `omw clean` ๋ฐ ๋ผ์ดํ์ฌ์ดํด ์๋ ์ ๋ฆฌ์์ ์ ์ธ๋ฉ๋๋ค.
|
|
338
|
+
|
|
339
|
+
### `omw log`
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
omw log # ์ต๊ทผ 20๊ฐ ์ด๋ฒคํธ ํ์
|
|
343
|
+
omw log --limit 50 # ์ต๊ทผ 50๊ฐ ์ด๋ฒคํธ ํ์
|
|
344
|
+
omw log --json # JSON ์ถ๋ ฅ
|
|
345
|
+
omw log --clear # ํ๋ ๋ก๊ทธ ์ด๊ธฐํ
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
์ด๋ฒคํธ๋ ์์์ผ๋ก ๊ตฌ๋ถ: ์์ฑ(์ด๋ก), ์ญ์ (๋นจ๊ฐ), ์ ํ(ํ๋), ๋ฆฌ๋ค์(๋
ธ๋), ์์นด์ด๋ธ(์ํ), ์ํฌํธ(์์).
|
|
349
|
+
|
|
350
|
+
### `omw archive`
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
omw archive feature/done --yes # ์์นด์ด๋ธ ํ ์ ๊ฑฐ
|
|
354
|
+
omw archive feature/wip --keep # ์ ๊ฑฐ ์์ด ์์นด์ด๋ธ๋ง
|
|
355
|
+
omw archive --list # ๋ชจ๋ ์์นด์ด๋ธ ๋ชฉ๋ก
|
|
356
|
+
omw archive --list --json # JSON ์ถ๋ ฅ
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
์์นด์ด๋ธ๋ `~/.omw/archives/`์ ํจ์น ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
|
|
360
|
+
|
|
361
|
+
### `omw rename`
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
omw rename old-branch new-branch # ๋ธ๋์น ๋ฆฌ๋ค์
|
|
365
|
+
omw rename old-branch new-branch --move-path # worktree ๋๋ ํ ๋ฆฌ๋ ์ด๋
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### `omw clone`
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
omw clone https://github.com/user/repo.git # ํด๋ก ๋ฐ ์ด๊ธฐํ
|
|
372
|
+
omw clone https://github.com/user/repo.git ./my-dir # ์ปค์คํ
๋์ ๊ฒฝ๋ก
|
|
373
|
+
omw clone https://github.com/user/repo.git --template review # ํ
ํ๋ฆฟ ์ ์ฉ
|
|
374
|
+
omw clone https://github.com/user/repo.git --no-init-config # ์ค์ ์ด๊ธฐํ ๊ฑด๋๋ฐ๊ธฐ
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### `omw import`
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
omw import /path/to/worktree # worktree ์ฑํ
|
|
381
|
+
omw import /path/to/worktree --focus apps/web,apps/api # ํฌ์ปค์ค์ ํจ๊ป
|
|
382
|
+
omw import /path/to/worktree --pin # ์ฆ์ ํ ์ค์
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### `omw session`
|
|
386
|
+
|
|
387
|
+
worktree์ tmux ์ธ์
์ ๊ด๋ฆฌํฉ๋๋ค. tmux๊ฐ ํ์ํฉ๋๋ค.
|
|
388
|
+
|
|
389
|
+
```bash
|
|
390
|
+
omw session feature/auth # ์ธ์
์ด๊ธฐ/์ฐ๊ฒฐ (์์ผ๋ฉด ์์ฑ)
|
|
391
|
+
omw session feature/auth --layout api # ์ค์ ์ ๋ ์ด์์ ์ฌ์ฉ
|
|
392
|
+
omw session --list # ํ์ฑ omw ์ธ์
๋ชฉ๋ก
|
|
393
|
+
omw session --list --json # JSON ์ถ๋ ฅ
|
|
394
|
+
omw session feature/auth --kill # worktree ์ธ์
์ข
๋ฃ
|
|
395
|
+
omw session --kill-all # ๋ชจ๋ omw ์ธ์
์ข
๋ฃ
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
์ค์ ์์ `sessions.autoCreate` / `sessions.autoKill`์ ํ์ฑํํ๋ฉด ์ธ์
์ด ์๋ ์์ฑ/์ข
๋ฃ๋ฉ๋๋ค.
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# tmux ์ธ์
๊ณผ ํจ๊ป worktree ์์ฑ
|
|
402
|
+
omw add feature/login --session
|
|
403
|
+
omw add feature/login --session --layout api
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
`sessions.enabled`๊ฐ `true`์ด๊ณ tmux ์์ ์์ผ๋ฉด, `omw switch`๊ฐ ๋์ worktree์ tmux ์ธ์
์ผ๋ก ์๋ ์ ํํฉ๋๋ค.
|
|
407
|
+
|
|
408
|
+
### `omw init`
|
|
409
|
+
|
|
410
|
+
๊ธฐ๋ณธ์ ์ผ๋ก omw ์ค์ ํ์ผ์ ์ด๊ธฐํํ๊ณ , ํ์ํ๋ฉด AI ์ฝ๋ฉ ์์ด์ ํธ์ฉ ์คํฌ๋ ์ค์นํฉ๋๋ค.
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
omw init # โ ~/.config/oh-my-worktree/config.json
|
|
414
|
+
omw init --skill claude-code # โ ~/.claude/skills/omw/
|
|
415
|
+
omw init --skill codex # โ ~/.agents/skills/omw/
|
|
416
|
+
omw init --skill opencode # โ ~/.config/opencode/skill/omw/
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
| ํ๋ซํผ | ์คํฌ ๊ฒฝ๋ก |
|
|
420
|
+
|--------|----------|
|
|
421
|
+
| `claude-code` | `~/.claude/skills/omw/` |
|
|
422
|
+
| `codex` | `~/.agents/skills/omw/` |
|
|
423
|
+
| `opencode` | `~/.config/opencode/skill/omw/` |
|
|
424
|
+
|
|
425
|
+
๊ฐ ์คํฌ ๋๋ ํ ๋ฆฌ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
|
|
426
|
+
- `SKILL.md` โ ๊ฐ์์ ๊ณตํต ์ํฌํ๋ก์ฐ
|
|
427
|
+
- `references/` โ ๋ช
๋ น๋ณ ์์ธ ๋ฌธ์ (21๊ฐ ํ์ผ)
|
|
428
|
+
|
|
429
|
+
`--skill` ์์ด ์คํํ๋ฉด ๊ธฐ์กด ์ค์ ์ด๊ธฐํ ๋ก์ง์ ์ฌ์ฌ์ฉํ์ฌ `config.json`๋ง ์์ฑํฉ๋๋ค.
|
|
430
|
+
๋ฉฑ๋ฑ์ฑ โ ๋ค์ ์คํํ๋ฉด ์คํฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
|
|
431
|
+
|
|
432
|
+
## ์ค์
|
|
433
|
+
|
|
434
|
+
์ค์ ํ์ผ: `~/.config/oh-my-worktree/config.json`
|
|
435
|
+
|
|
436
|
+
์ด๊ธฐํ: `omw config --init`
|
|
437
|
+
|
|
438
|
+
### ์ ์ฒด ์์
|
|
439
|
+
|
|
440
|
+
```json
|
|
441
|
+
{
|
|
442
|
+
"$schema": "https://raw.githubusercontent.com/getsolaris/oh-my-worktree/main/schema.json",
|
|
443
|
+
"version": 1,
|
|
444
|
+
"theme": "dracula",
|
|
445
|
+
"defaults": {
|
|
446
|
+
"worktreeDir": "~/.omw/worktrees/{repo}-{branch}",
|
|
447
|
+
"copyFiles": [".env"],
|
|
448
|
+
"linkFiles": ["node_modules"],
|
|
449
|
+
"postCreate": ["bun install"],
|
|
450
|
+
"postRemove": [],
|
|
451
|
+
"sharedDeps": {
|
|
452
|
+
"strategy": "hardlink",
|
|
453
|
+
"paths": ["node_modules"],
|
|
454
|
+
"invalidateOn": ["package.json", "bun.lockb"]
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
"templates": {
|
|
458
|
+
"review": {
|
|
459
|
+
"copyFiles": [".env.local"],
|
|
460
|
+
"postCreate": ["bun install", "bun run build"],
|
|
461
|
+
"autoUpstream": true
|
|
462
|
+
},
|
|
463
|
+
"hotfix": {
|
|
464
|
+
"base": "main",
|
|
465
|
+
"copyFiles": [".env.production"],
|
|
466
|
+
"postCreate": ["bun install"]
|
|
467
|
+
},
|
|
468
|
+
"experiment": {
|
|
469
|
+
"worktreeDir": "~/tmp/experiments/{branch}",
|
|
470
|
+
"postRemove": []
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
"lifecycle": {
|
|
474
|
+
"autoCleanMerged": true,
|
|
475
|
+
"staleAfterDays": 14,
|
|
476
|
+
"maxWorktrees": 10
|
|
477
|
+
},
|
|
478
|
+
"sessions": {
|
|
479
|
+
"enabled": true,
|
|
480
|
+
"autoCreate": false,
|
|
481
|
+
"autoKill": true,
|
|
482
|
+
"prefix": "omw",
|
|
483
|
+
"defaultLayout": "dev",
|
|
484
|
+
"layouts": {
|
|
485
|
+
"dev": {
|
|
486
|
+
"windows": [
|
|
487
|
+
{ "name": "editor", "command": "$EDITOR ." },
|
|
488
|
+
{ "name": "dev", "command": "bun dev" },
|
|
489
|
+
{ "name": "test", "command": "bun test --watch" }
|
|
490
|
+
]
|
|
491
|
+
},
|
|
492
|
+
"minimal": {
|
|
493
|
+
"windows": [
|
|
494
|
+
{ "name": "shell" }
|
|
495
|
+
]
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
"repos": [
|
|
500
|
+
{
|
|
501
|
+
"path": "/Users/me/dev/frontend",
|
|
502
|
+
"copyFiles": [".env", ".env.local"],
|
|
503
|
+
"linkFiles": ["node_modules", ".next"],
|
|
504
|
+
"postCreate": ["bun install", "bun run build"]
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"path": "/Users/me/dev/backend",
|
|
508
|
+
"copyFiles": [".env"],
|
|
509
|
+
"postCreate": ["pip install -r requirements.txt"]
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"path": "/Users/me/dev/monorepo",
|
|
513
|
+
"copyFiles": [".env"],
|
|
514
|
+
"postCreate": ["pnpm install"],
|
|
515
|
+
"monorepo": {
|
|
516
|
+
"autoDetect": true,
|
|
517
|
+
"extraPatterns": ["apps/*/*"],
|
|
518
|
+
"hooks": [
|
|
519
|
+
{
|
|
520
|
+
"glob": "apps/web",
|
|
521
|
+
"copyFiles": [".env"],
|
|
522
|
+
"postCreate": ["cd {packagePath} && pnpm install"]
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"glob": "apps/api",
|
|
526
|
+
"copyFiles": [".env"],
|
|
527
|
+
"linkFiles": ["node_modules"],
|
|
528
|
+
"postCreate": ["cd {packagePath} && pnpm install && pnpm build"]
|
|
529
|
+
}
|
|
530
|
+
]
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
]
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### ์ค์ ํ๋
|
|
538
|
+
|
|
539
|
+
#### `defaults`
|
|
540
|
+
|
|
541
|
+
๋ชจ๋ ๋ ํฌ๊ฐ ์ด ์ค์ ์ ์์ํฉ๋๋ค (๋ ํฌ๋ณ ์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅ).
|
|
542
|
+
|
|
543
|
+
| ํ๋ | ํ์
| ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
544
|
+
|------|------|--------|------|
|
|
545
|
+
| `worktreeDir` | `string` | `~/.omw/worktrees/{repo}-{branch}` | worktree ๋๋ ํ ๋ฆฌ ํจํด |
|
|
546
|
+
| `copyFiles` | `string[]` | `[]` | ๋ฉ์ธ ๋ ํฌ์์ ๋ณต์ฌํ ํ์ผ |
|
|
547
|
+
| `linkFiles` | `string[]` | `[]` | ์ฌ๋ณผ๋ฆญ ๋งํฌํ ํ์ผ/๋๋ ํ ๋ฆฌ (๋์คํฌ ์ ์ฝ) |
|
|
548
|
+
| `postCreate` | `string[]` | `[]` | worktree ์์ฑ ํ ์คํํ ์ปค๋งจ๋ |
|
|
549
|
+
| `postRemove` | `string[]` | `[]` | worktree ์ ๊ฑฐ ์ ์คํํ ์ปค๋งจ๋ |
|
|
550
|
+
|
|
551
|
+
#### `repos[]`
|
|
552
|
+
|
|
553
|
+
๋ ํฌ๋ณ ์ค๋ฒ๋ผ์ด๋. ๊ฐ ํญ๋ชฉ์ `path`๊ฐ ํ์์
๋๋ค.
|
|
554
|
+
|
|
555
|
+
| ํ๋ | ํ์
| ํ์ | ์ค๋ช
|
|
|
556
|
+
|------|------|------|------|
|
|
557
|
+
| `path` | `string` | ์ | ๋ ํฌ์ ์ ๋ ๊ฒฝ๋ก |
|
|
558
|
+
| `worktreeDir` | `string` | ์๋์ค | ๊ธฐ๋ณธ worktree ๋๋ ํ ๋ฆฌ ์ค๋ฒ๋ผ์ด๋ |
|
|
559
|
+
| `copyFiles` | `string[]` | ์๋์ค | ๊ธฐ๋ณธ ๋ณต์ฌ ํ์ผ ์ค๋ฒ๋ผ์ด๋ |
|
|
560
|
+
| `linkFiles` | `string[]` | ์๋์ค | ๊ธฐ๋ณธ ๋งํฌ ํ์ผ ์ค๋ฒ๋ผ์ด๋ |
|
|
561
|
+
| `postCreate` | `string[]` | ์๋์ค | ๊ธฐ๋ณธ postCreate ํ
์ค๋ฒ๋ผ์ด๋ |
|
|
562
|
+
| `postRemove` | `string[]` | ์๋์ค | ๊ธฐ๋ณธ postRemove ํ
์ค๋ฒ๋ผ์ด๋ |
|
|
563
|
+
| `monorepo` | `object` | ์๋์ค | ๋ชจ๋
ธ๋ ํฌ ์ง์ ์ค์ |
|
|
564
|
+
|
|
565
|
+
#### `monorepo`
|
|
566
|
+
|
|
567
|
+
๋ฒ์ฉ ๋ชจ๋
ธ๋ ํฌ ์ง์. ์ํฌ์คํ์ด์ค ์ค์ ํ์ผ์์ ํจํค์ง๋ฅผ ์๋ ๊ฐ์งํ๊ณ ํจํค์ง๋ณ ํ
์ ์ง์ํฉ๋๋ค.
|
|
568
|
+
|
|
569
|
+
```json
|
|
570
|
+
{
|
|
571
|
+
"monorepo": {
|
|
572
|
+
"autoDetect": true,
|
|
573
|
+
"extraPatterns": ["apps/*/*"],
|
|
574
|
+
"hooks": [
|
|
575
|
+
{
|
|
576
|
+
"glob": "apps/mobile/*",
|
|
577
|
+
"copyFiles": [".env"],
|
|
578
|
+
"linkFiles": ["node_modules"],
|
|
579
|
+
"postCreate": ["cd {packagePath} && pnpm install"]
|
|
580
|
+
}
|
|
581
|
+
]
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
| ํ๋ | ํ์
| ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
587
|
+
|------|------|--------|------|
|
|
588
|
+
| `autoDetect` | `boolean` | `true` | ๋ชจ๋
ธ๋ ํฌ ๋๊ตฌ ์๋ ๊ฐ์ง |
|
|
589
|
+
| `extraPatterns` | `string[]` | `[]` | ํจํค์ง ํ์์ฉ ์ถ๊ฐ glob ํจํด |
|
|
590
|
+
| `hooks` | `array` | `[]` | ํจํค์ง๋ณ ํ
์ ์ |
|
|
591
|
+
|
|
592
|
+
**์๋ ๊ฐ์ง** ์ง์: pnpm workspaces, Turborepo, Nx, Lerna, npm/yarn workspaces.
|
|
593
|
+
|
|
594
|
+
**`extraPatterns`**๋ ์๋ ๊ฐ์ง์์ ๋๋ฝ๋ ํจํค์ง๋ฅผ ์ก์ต๋๋ค. ์๋ฅผ ๋ค์ด, `pnpm-workspace.yaml`์ด `packages/*`๋ง ์ปค๋ฒํ๋๋ฐ `apps/frontend/dashboard`์๋ ์ฑ์ด ์๋ค๋ฉด `extraPatterns: ["apps/*/*"]`๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
595
|
+
|
|
596
|
+
#### `monorepo.hooks[]`
|
|
597
|
+
|
|
598
|
+
ํฌ์ปค์ค ๊ฒฝ๋ก์ ๋ํด glob ํจํด์ผ๋ก ๋งค์นญ๋๋ ํจํค์ง๋ณ ํ
.
|
|
599
|
+
|
|
600
|
+
| ํ๋ | ํ์
| ํ์ | ์ค๋ช
|
|
|
601
|
+
|------|------|------|------|
|
|
602
|
+
| `glob` | `string` | ์ | ํฌ์ปค์ค ๊ฒฝ๋ก ๋งค์นญ์ฉ glob (์: `apps/*`, `apps/mobile/*`) |
|
|
603
|
+
| `copyFiles` | `string[]` | ์๋์ค | ๋งค์นญ๋ ํจํค์ง ๋๋ ํ ๋ฆฌ ๋ด์์ ๋ณต์ฌํ ํ์ผ |
|
|
604
|
+
| `linkFiles` | `string[]` | ์๋์ค | ๋งค์นญ๋ ํจํค์ง ๋๋ ํ ๋ฆฌ ๋ด์์ ์ฌ๋ณผ๋ฆญ ๋งํฌํ ํ์ผ/๋๋ ํ ๋ฆฌ |
|
|
605
|
+
| `postCreate` | `string[]` | ์๋์ค | ์์ฑ ํ ์คํํ ์ปค๋งจ๋. `{packagePath}`, `{repo}`, `{branch}` ์ง์ |
|
|
606
|
+
| `postRemove` | `string[]` | ์๋์ค | ์ ๊ฑฐ ์ ์คํํ ์ปค๋งจ๋ |
|
|
607
|
+
|
|
608
|
+
ํ
์ ์ ์ธ ์์๋๋ก ์คํ๋๋ฉฐ, ๋ ํฌ ๋ ๋ฒจ `postCreate`/`postRemove` ์ดํ์ ์คํ๋ฉ๋๋ค.
|
|
609
|
+
|
|
610
|
+
**ํ
๋ด `copyFiles`/`linkFiles`**๋ ๋ ํฌ ๋ฃจํธ๊ฐ ์๋ **ํจํค์ง ์๋ธ๋๋ ํ ๋ฆฌ**์์ ๋์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, `glob: "apps/mobile/*"`์ด๊ณ `copyFiles: [".env"]`์ด๋ฉด, `.env` ํ์ผ์ `<๋ฉ์ธ-๋ ํฌ>/apps/mobile/ios/.env`์์ `<worktree>/apps/mobile/ios/.env`๋ก ๋ณต์ฌ๋ฉ๋๋ค.
|
|
611
|
+
|
|
612
|
+
#### `templates`
|
|
613
|
+
|
|
614
|
+
worktree ์์ฑ์ ์ํ ์ด๋ฆ์ด ๋ถ์ ํ๋ฆฌ์
. ๊ฐ ํ
ํ๋ฆฟ์ ๊ธฐ๋ณธ๊ฐ ํ๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ ์ ์์ต๋๋ค.
|
|
615
|
+
|
|
616
|
+
```json
|
|
617
|
+
{
|
|
618
|
+
"templates": {
|
|
619
|
+
"review": {
|
|
620
|
+
"copyFiles": [".env.local"],
|
|
621
|
+
"postCreate": ["bun install", "bun run build"],
|
|
622
|
+
"autoUpstream": true
|
|
623
|
+
},
|
|
624
|
+
"hotfix": {
|
|
625
|
+
"base": "main",
|
|
626
|
+
"copyFiles": [".env.production"],
|
|
627
|
+
"postCreate": ["bun install"]
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
| ํ๋ | ํ์
| ์ค๋ช
|
|
|
634
|
+
|------|------|------|
|
|
635
|
+
| `worktreeDir` | `string` | worktree ๋๋ ํ ๋ฆฌ ์ค๋ฒ๋ผ์ด๋ |
|
|
636
|
+
| `copyFiles` | `string[]` | ๋ณต์ฌํ ํ์ผ ์ค๋ฒ๋ผ์ด๋ |
|
|
637
|
+
| `linkFiles` | `string[]` | ์ฌ๋ณผ๋ฆญ ๋งํฌํ ํ์ผ ์ค๋ฒ๋ผ์ด๋ |
|
|
638
|
+
| `postCreate` | `string[]` | postCreate ํ
์ค๋ฒ๋ผ์ด๋ |
|
|
639
|
+
| `postRemove` | `string[]` | postRemove ํ
์ค๋ฒ๋ผ์ด๋ |
|
|
640
|
+
| `autoUpstream` | `boolean` | upstream ์ถ์ ์ค๋ฒ๋ผ์ด๋ |
|
|
641
|
+
| `base` | `string` | ์๋ก ์์ฑ๋๋ ๋ธ๋์น์ ๊ธฐ๋ณธ ๋ฒ ์ด์ค ๋ธ๋์น |
|
|
642
|
+
|
|
643
|
+
์ฌ์ฉ๋ฒ: `omw add feature/login --template review`
|
|
644
|
+
|
|
645
|
+
ํ
ํ๋ฆฟ ๊ฐ์ ๋ฆฌ์กธ๋ธ๋ ๋ ํฌ ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ํฉ๋๋ค. `base` ํ๋๋ `--base`๊ฐ ๋ช
์์ ์ผ๋ก ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํฉ๋๋ค.
|
|
646
|
+
|
|
647
|
+
#### `lifecycle`
|
|
648
|
+
|
|
649
|
+
์๋ worktree ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ. `omw clean --stale`์์ ์ฌ์ฉ๋ฉ๋๋ค.
|
|
650
|
+
|
|
651
|
+
```json
|
|
652
|
+
{
|
|
653
|
+
"lifecycle": {
|
|
654
|
+
"autoCleanMerged": true,
|
|
655
|
+
"staleAfterDays": 14,
|
|
656
|
+
"maxWorktrees": 10
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
| ํ๋ | ํ์
| ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
662
|
+
|------|------|--------|------|
|
|
663
|
+
| `autoCleanMerged` | `boolean` | `false` | ๋จธ์ง๋ worktree๋ฅผ ์ ๋ฆฌ ๋์์ผ๋ก ํ์ |
|
|
664
|
+
| `staleAfterDays` | `number` | โ | ๋นํ์ฑ์ผ๋ก ํ์ํ๊ธฐ๊น์ง ์ผ์ |
|
|
665
|
+
| `maxWorktrees` | `number` | โ | ์ด ์๋ฅผ ์ด๊ณผํ๋ฉด ๊ฒฝ๊ณ |
|
|
666
|
+
|
|
667
|
+
#### `sessions`
|
|
668
|
+
|
|
669
|
+
worktree๋ณ tmux ์ธ์
๊ด๋ฆฌ.
|
|
670
|
+
|
|
671
|
+
```json
|
|
672
|
+
{
|
|
673
|
+
"sessions": {
|
|
674
|
+
"enabled": true,
|
|
675
|
+
"autoCreate": true,
|
|
676
|
+
"autoKill": true,
|
|
677
|
+
"prefix": "omw",
|
|
678
|
+
"defaultLayout": "dev",
|
|
679
|
+
"layouts": {
|
|
680
|
+
"dev": {
|
|
681
|
+
"windows": [
|
|
682
|
+
{ "name": "editor", "command": "$EDITOR ." },
|
|
683
|
+
{ "name": "dev", "command": "bun dev" },
|
|
684
|
+
{ "name": "test", "command": "bun test --watch" }
|
|
685
|
+
]
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
| ํ๋ | ํ์
| ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
693
|
+
|------|------|--------|------|
|
|
694
|
+
| `enabled` | `boolean` | `false` | ์ธ์
์ฐ๋ ํ์ฑํ (tmux ๋ด ์๋ ์ ํ) |
|
|
695
|
+
| `autoCreate` | `boolean` | `false` | `omw add` ์ tmux ์ธ์
์๋ ์์ฑ |
|
|
696
|
+
| `autoKill` | `boolean` | `false` | `omw remove` ์ tmux ์ธ์
์๋ ์ข
๋ฃ |
|
|
697
|
+
| `prefix` | `string` | `"omw"` | tmux ์ธ์
์ด๋ฆ ์ ๋์ฌ |
|
|
698
|
+
| `defaultLayout` | `string` | โ | ์ ์ธ์
์ ๊ธฐ๋ณธ ๋ ์ด์์ ์ด๋ฆ |
|
|
699
|
+
| `layouts` | `object` | `{}` | ์๋์ฐ ์ ์๊ฐ ํฌํจ๋ ์ด๋ฆ ์๋ ๋ ์ด์์ |
|
|
700
|
+
|
|
701
|
+
**๋ ์ด์์ ์๋์ฐ:**
|
|
702
|
+
|
|
703
|
+
| ํ๋ | ํ์
| ํ์ | ์ค๋ช
|
|
|
704
|
+
|------|------|------|------|
|
|
705
|
+
| `name` | `string` | ์ | ์๋์ฐ ์ด๋ฆ |
|
|
706
|
+
| `command` | `string` | ์๋์ค | ์๋์ฐ์์ ์คํํ ์ปค๋งจ๋ |
|
|
707
|
+
|
|
708
|
+
์ธ์
์ด๋ฆ ๊ท์น: ๋ธ๋์น `feat/auth-token` โ tmux ์ธ์
`omw_feat-auth-token`.
|
|
709
|
+
|
|
710
|
+
#### `sharedDeps`
|
|
711
|
+
|
|
712
|
+
๋ฉ์ธ ๋ ํฌ์ worktree ๊ฐ ์์กด์ฑ์ ๊ณต์ ํ์ฌ ๋์คํฌ ๊ณต๊ฐ์ ์ ์ฝํฉ๋๋ค. `defaults` ๋๋ ๋ ํฌ๋ณ๋ก ์ค์ ๊ฐ๋ฅํฉ๋๋ค.
|
|
713
|
+
|
|
714
|
+
```json
|
|
715
|
+
{
|
|
716
|
+
"defaults": {
|
|
717
|
+
"sharedDeps": {
|
|
718
|
+
"strategy": "hardlink",
|
|
719
|
+
"paths": ["node_modules"],
|
|
720
|
+
"invalidateOn": ["package.json", "bun.lockb"]
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
| ํ๋ | ํ์
| ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
727
|
+
|------|------|--------|------|
|
|
728
|
+
| `strategy` | `string` | `"symlink"` | `"hardlink"`, `"symlink"`, ๋๋ `"copy"` |
|
|
729
|
+
| `paths` | `string[]` | `[]` | ๊ณต์ ํ ๋๋ ํ ๋ฆฌ/ํ์ผ |
|
|
730
|
+
| `invalidateOn` | `string[]` | `[]` | ๋ณ๊ฒฝ ์ ์ฌ๊ณต์ ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ํ์ผ |
|
|
731
|
+
|
|
732
|
+
**์ ๋ต:**
|
|
733
|
+
- `hardlink` โ ๊ฐ ํ์ผ์ ํ๋ ๋งํฌ ์์ฑ (๋์คํฌ ์ ์ฝ, ๋ค์ ์ฐ์ฌ์ง๋ ํ์ผ์ worktree๋ง๋ค ๋
๋ฆฝ์ ์ผ๋ก ์์ ๊ฐ๋ฅ)
|
|
734
|
+
- `symlink` โ ์์ค ๋๋ ํ ๋ฆฌ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ ์์ฑ (์ต๋ ๋์คํฌ ์ ์ฝ, ์ํ ๊ณต์ )
|
|
735
|
+
- `copy` โ ์ผ๋ฐ ๋ณต์ฌ๋ก ํด๋ฐฑ
|
|
736
|
+
|
|
737
|
+
### `--focus` ํ๋๊ทธ
|
|
738
|
+
|
|
739
|
+
worktree๊ฐ ์์
์ค์ธ ๋ชจ๋
ธ๋ ํฌ ํจํค์ง๋ฅผ ์ถ์ ํฉ๋๋ค.
|
|
740
|
+
|
|
741
|
+
```bash
|
|
742
|
+
omw add feature/login --focus apps/web,apps/api
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
- ์ผํ, ๊ณต๋ฐฑ, ๋๋ ์ฌ๋ฌ `--focus` ํ๋๊ทธ ์ง์
|
|
746
|
+
- ํฌ์ปค์ค ๋ฉํ๋ฐ์ดํฐ๋ git ๋ด๋ถ์ ์ ์ฅ (worktree ๋ฃจํธ๊ฐ ์๋)
|
|
747
|
+
- `omw list`์์ worktree๋ณ ํฌ์ปค์ค ๊ฒฝ๋ก ํ์
|
|
748
|
+
- ๋ชจ๋
ธ๋ ํฌ ํ
์ ๋งค์นญ๋๋ ํฌ์ปค์ค ๊ฒฝ๋ก์ ๋ํด์๋ง ์คํ
|
|
749
|
+
- ํฌ์ปค์ค๋ ์ ํ์ฌํญ โ ์๋ตํ๋ฉด ์ผ๋ฐ worktree ์์ฑ
|
|
750
|
+
|
|
751
|
+
### ํ
ํ๋ฆฟ ๋ณ์
|
|
752
|
+
|
|
753
|
+
`worktreeDir` ๋ฐ ๋ชจ๋
ธ๋ ํฌ ํ
์ปค๋งจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ:
|
|
754
|
+
|
|
755
|
+
| ๋ณ์ | ์ค๋ช
| ์์ |
|
|
756
|
+
|------|------|------|
|
|
757
|
+
| `{repo}` | ๋ ํฌ ๋๋ ํ ๋ฆฌ ์ด๋ฆ | `my-app` |
|
|
758
|
+
| `{branch}` | ๋ธ๋์น ์ด๋ฆ (`/`๋ `-`๋ก ๋์ฒด) | `feature-auth` |
|
|
759
|
+
| `{packagePath}` | ๋งค์นญ๋ ํจํค์ง ๊ฒฝ๋ก (๋ชจ๋
ธ๋ ํฌ ํ
์ ์ฉ) | `apps/web` |
|
|
760
|
+
| `~` | ํ ๋๋ ํ ๋ฆฌ (๊ฒฝ๋ก ์์ ์์น์์๋ง) | `/Users/me` |
|
|
761
|
+
|
|
762
|
+
### ์ฐ์ ์์
|
|
763
|
+
|
|
764
|
+
๋ ํฌ๋ณ ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ ์์ ํ ๋์ฒดํฉ๋๋ค (๋จธ์ง ์์):
|
|
765
|
+
|
|
766
|
+
```
|
|
767
|
+
repos[].copyFiles ์กด์ฌ? โ repos[].copyFiles ์ฌ์ฉ
|
|
768
|
+
repos[].copyFiles ์์? โ defaults.copyFiles ์ฌ์ฉ
|
|
769
|
+
defaults.copyFiles ์์? โ [] (๋น ๋ฐฐ์ด) ์ฌ์ฉ
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
### ํ
๋ง
|
|
773
|
+
|
|
774
|
+
์ค์ ํ์ผ ๋๋ ์ปค๋งจ๋ ํ๋ ํธ (`Ctrl+P`)์์ ์ค์ :
|
|
775
|
+
|
|
776
|
+
```json
|
|
777
|
+
{ "theme": "tokyo-night" }
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
์ฌ์ฉ ๊ฐ๋ฅ: `opencode`, `tokyo-night`, `dracula`, `nord`, `catppuccin`, `github-dark`
|
|
781
|
+
|
|
782
|
+
## ์
ธ ํตํฉ
|
|
783
|
+
|
|
784
|
+
`omw shell-init`์ผ๋ก `omw switch`์ฉ ์
ธ ํตํฉ์ ์ค์นํ์ธ์.
|
|
785
|
+
|
|
786
|
+
### ์
ธ ์๋์์ฑ
|
|
787
|
+
|
|
788
|
+
```bash
|
|
789
|
+
# ์๋์์ฑ ์ถ๊ฐ (bash)
|
|
790
|
+
eval "$(omw shell-init --completions bash)"
|
|
791
|
+
|
|
792
|
+
# ์๋์์ฑ ์ถ๊ฐ (zsh)
|
|
793
|
+
eval "$(omw shell-init --completions zsh)"
|
|
794
|
+
|
|
795
|
+
# ์๋์์ฑ ์ถ๊ฐ (fish)
|
|
796
|
+
omw shell-init --completions fish | source
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
### ์์
|
|
800
|
+
|
|
801
|
+
```bash
|
|
802
|
+
# zsh
|
|
803
|
+
echo 'eval "$(omw shell-init zsh)"' >> ~/.zshrc
|
|
804
|
+
source ~/.zshrc
|
|
805
|
+
|
|
806
|
+
# bash
|
|
807
|
+
echo 'eval "$(omw shell-init bash)"' >> ~/.bashrc
|
|
808
|
+
source ~/.bashrc
|
|
809
|
+
|
|
810
|
+
# fish
|
|
811
|
+
omw shell-init fish >> ~/.config/fish/config.fish
|
|
812
|
+
source ~/.config/fish/config.fish
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
์ค์ ์ ์ฅ ์ ์์ฑ๋ ๋ํผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์๋ ์์ต๋๋ค:
|
|
816
|
+
|
|
817
|
+
```bash
|
|
818
|
+
omw shell-init zsh
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
## ์ค์ ํ๋กํ
|
|
822
|
+
|
|
823
|
+
์๋ก ๋ค๋ฅธ ์ค์ ์ธํธ ๊ฐ ์ ํํฉ๋๋ค.
|
|
824
|
+
|
|
825
|
+
```bash
|
|
826
|
+
omw config --profiles # ํ๋กํ ๋ชฉ๋ก
|
|
827
|
+
omw config --profile work --activate # ํ๋กํ ํ์ฑํ
|
|
828
|
+
omw config --profile personal --delete # ํ๋กํ ์ญ์
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
## ๋ผ์ด์ ์ค
|
|
832
|
+
|
|
833
|
+
MIT ยฉ getsolaris
|