Skip to content

Commit 62011f5

Browse files
committed
폴더 CRUD 및 폴더-장소 관리 API 구현 필요 : feat : 최신 커스텀 커맨드 교체 #26
1 parent c0a2fd3 commit 62011f5

File tree

8 files changed

+1791
-1025
lines changed

8 files changed

+1791
-1025
lines changed
Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
# init-workflow
1+
# init-worktree
22

33
Git worktree를 자동으로 생성하는 커맨드입니다.
44

55
브랜치명을 입력받아 자동으로:
6-
1. 브랜치명은 사용자 입력 그대로 사용 (예: `20260127_#16_...`)
7-
2. 브랜치가 없으면 생성 (현재 브랜치에서 분기)
8-
3. 폴더명만 특수문자(`#` 포함)를 `_`로 변환하여 생성 (예: `20260127_16_...`)
6+
1. 브랜치명에서 `#` 문자 제거 (Git 브랜치명으로 사용)
7+
2. 브랜치가 없으면 리모트(origin) 확인 → 있으면 tracking 브랜치로 가져오기, 없으면 현재 브랜치에서 새로 생성
8+
3. 브랜치명의 특수문자를 `_`로 변환하여 폴더명 생성
99
4. `{프로젝트명}-Worktree` 폴더에 worktree 생성 (예: `RomRom-FE-Worktree`)
1010
5. 설정 파일 자동 복사 (Firebase, iOS, Android 키 등)
1111
6. 이미 존재하면 경로만 출력
1212

1313
## 사용법
1414

1515
```
16-
/init-workflow
16+
/init-worktree
1717
1818
20260120_#163_Github_Projects_에_대한_템플릿_개발_필요_및_관련_Sync_워크플로우_개발_필요
1919
```
2020

2121
## 실행 로직
2222

2323
1. 사용자 입력에서 두 번째 줄의 브랜치명 추출
24-
2. 브랜치명은 그대로 사용 (임시 Python 스크립트에 포함)
24+
2. 브랜치명에서 `#` 문자 제거
2525
3. 임시 Python 스크립트 파일 생성 (인코딩 문제 해결)
2626
4. Python 스크립트 실행 (worktree 생성 + 설정 파일 복사)
2727
5. 임시 파일 자동 삭제
@@ -37,22 +37,20 @@ Git worktree를 자동으로 생성하는 커맨드입니다.
3737
브랜치명이 제공된 경우:
3838
1. 프로젝트 루트로 이동
3939
2. Git 긴 경로 지원 활성화: `git config --global core.longpaths true` (최초 1회만 실행)
40-
3. 브랜치명은 사용자 입력 그대로 사용 (예: `20260116_#432_...` 그대로 유지)
41-
4. 임시 Python 스크립트 파일 생성:
42-
- 파일명: `init_worktree_temp_{timestamp}.py`
43-
- 브랜치명을 코드에 직접 포함 (인코딩 문제 해결)
44-
- worktree 생성 로직 포함
45-
5. **Python 스크립트 실행** (Windows에서는 `-X utf8` 플래그 필수):
40+
3. 임시 Python 스크립트 파일 생성:
41+
- 파일명: `init_worktree_temp_{timestamp}.py`
42+
- 브랜치명을 코드에 직접 포함 (인코딩 문제 해결, `#` 문자 유지)
43+
- worktree 생성 로직 포함
44+
4. **Python 스크립트 실행** (Windows에서는 `-X utf8` 플래그 필수):
4645
```bash
4746
python -X utf8 init_worktree_temp_{timestamp}.py
4847
```
49-
6. 임시 파일 삭제
50-
7. 결과 출력
51-
8. 에이전트가 `.gitignore` 분석 후 민감 파일 복사
48+
5. 임시 파일 삭제
49+
6. 결과 출력
50+
7. 에이전트가 `.gitignore` 분석 후 민감 파일 복사
5251

5352
**중요**:
54-
- **브랜치명 처리**: 브랜치명은 사용자 입력 그대로 사용됩니다 (`#` 문자 포함)
55-
- **폴더명 처리**: 폴더명만 `normalize_branch_name()` 함수로 특수문자(`#` 포함)를 `_`로 변환합니다
53+
- **브랜치명 처리**: 브랜치명은 `#` 문자를 포함하여 **원본 그대로** 전달됩니다. `#`**폴더명 생성 시에만** `_`로 변환됩니다.
5654
- **인코딩 문제 해결**: Python 스크립트 파일에 브랜치명을 직접 포함시켜 Windows PowerShell 인코딩 문제 회피
5755
- **Windows UTF-8 모드**: Python 실행 시 `-X utf8` 플래그 사용 필수
5856
- **설정 파일 자동 복사**: worktree 생성 후 에이전트가 동적으로 파일 복사
@@ -67,7 +65,7 @@ git config --global core.longpaths true
6765
# Python UTF-8 모드로 실행 (Windows 한글 인코딩 문제 해결)
6866
python -X utf8 init_worktree_temp.py
6967
70-
# 입력 브랜치명: 20260116_#432_UX_개선_및_페이지_디자인_수정
68+
# 브랜치명: 20260116_#432_UX_개선_및_페이지_디자인_수정
7169
# → Git 브랜치: 20260116_#432_UX_개선_및_페이지_디자인_수정 (# 유지)
7270
# → 폴더명: 20260116_432_UX_개선_및_페이지_디자인_수정 (# → _ 변환)
7371
```
@@ -83,7 +81,7 @@ import glob
8381
# 프로젝트 루트로 이동
8482
os.chdir('프로젝트_루트_경로')
8583

86-
# 브랜치명 (사용자 입력 그대로)
84+
# 브랜치명 (원본 그대로, # 유지)
8785
branch_name = '20260116_#432_UX_개선_및_페이지_디자인_수정'
8886

8987
# worktree_manager 실행
@@ -96,18 +94,18 @@ exit_code = worktree_manager.main()
9694

9795
# worktree 경로를 환경변수로 설정 (에이전트가 파일 복사에 사용)
9896
if exit_code == 0:
99-
import subprocess
100-
result = subprocess.run(['git', 'worktree', 'list', '--porcelain'],
97+
import subprocess
98+
result = subprocess.run(['git', 'worktree', 'list', '--porcelain'],
10199
capture_output=True, text=True, encoding='utf-8')
102-
lines = result.stdout.split('\n')
103-
worktree_path = None
104-
for i, line in enumerate(lines):
105-
if line.startswith(f'branch refs/heads/{branch_name}'):
106-
worktree_path = lines[i-1].replace('worktree ', '')
107-
break
108-
109-
if worktree_path:
110-
print(f'📍 WORKTREE_PATH={worktree_path}')
100+
lines = result.stdout.split('\n')
101+
worktree_path = None
102+
for i, line in enumerate(lines):
103+
if line.startswith(f'branch refs/heads/{branch_name}'):
104+
worktree_path = lines[i-1].replace('worktree ', '')
105+
break
106+
107+
if worktree_path:
108+
print(f'📍 WORKTREE_PATH={worktree_path}')
111109

112110
sys.exit(exit_code)
113111
```

.claude/commands/issue.md

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
# Issue Mode
2+
3+
당신은 GitHub 이슈 작성 전문가입니다. 사용자의 대략적인 설명을 받아 **GitHub 이슈 템플릿에 맞는 제목과 본문을 자동으로 작성**합니다.
4+
5+
## 절대 금지 사항
6+
7+
- ❌ 코드적인 내용 작성 금지 (구현 방법, 코드 예시 등 포함하지 않음)
8+
- ❌ 긴급(🔥) 태그를 임의로 추가하지 않음 (사용자가 직접 "긴급"이라고 말한 경우에만)
9+
- ❌ 담당자 내용을 임의로 채우지 않음 (템플릿 기본값 그대로 유지)
10+
11+
## 사용자 입력
12+
13+
$ARGUMENTS
14+
15+
---
16+
17+
## 동작 프로세스
18+
19+
### 1단계: 이슈 타입 자동 판단
20+
21+
사용자 입력을 분석하여 아래 4가지 타입 중 하나를 판단합니다:
22+
23+
| 타입 | 판단 키워드/상황 | 템플릿 |
24+
|------|----------------|--------|
25+
| **버그** | 안 됨, 에러, 깨짐, 오류, 크래시, 안 됨, 문제, 장애, 실패, 로그 | `bug_report` |
26+
| **기능 (추가/개선/요청)** | 추가, 만들어야, 새로, 구현, 필요, 개선, 수정, 변경, 요청, 제안 | `feature_request` |
27+
| **디자인** | 디자인, UI, UX, 폰트, 색상, 레이아웃, 화면, 아이콘 | `design_request` |
28+
| **QA/시험** | 테스트, QA, 시험, 검증, 확인 | `qa_request` |
29+
30+
**기능 타입 세분류** (제목 이모지 결정):
31+
- ⚙️`[기능추가]` : 완전히 새로운 기능
32+
- 🚀`[기능개선]` : 기존 기능 개선/수정
33+
- 🔧`[기능요청]` : 제안/요청 수준
34+
35+
### 2단계: 부족한 정보 질문
36+
37+
**반드시 질문하는 경우:**
38+
- 타입 판단이 애매할 때 (버그인지 개선인지 등)
39+
- 카테고리 태그를 특정할 수 없을 때
40+
41+
**질문하지 않는 경우 (알아서 판단):**
42+
- 문맥상 명확한 것 (로그인 에러 → 버그)
43+
- 환경 정보 등 선택 항목 (비워두면 됨)
44+
- 담당자 (항상 기본값 유지)
45+
46+
**질문 스타일:** 짧고 직관적으로, 가능하면 선택지 제공
47+
48+
### 3단계: 이슈 파일 저장
49+
50+
판단된 타입에 맞는 템플릿을 사용하여 **제목 + 본문**`.issue/` 폴더에 마크다운 파일로 저장합니다.
51+
52+
### 이슈 파일 생성 로직
53+
54+
1. **.issue 폴더 확인**
55+
- `.issue/` 폴더가 없으면 자동 생성
56+
57+
2. **파일명 생성**
58+
- 형식: `#[YYYYMMDD]_[순번]_[이슈타입]_[간단한설명].md`
59+
- `#` 접두사: 파일 정렬 및 이슈 파일 식별용
60+
- 날짜: 현재 날짜 (YYYYMMDD 형식)
61+
- 순번: 같은 날짜 내 `.issue/` 폴더의 기존 파일 수를 확인하여 3자리 자동 증가 (001, 002, ...)
62+
- 이슈타입: `버그`, `기능추가`, `기능개선`, `기능요청`, `디자인`, `시험요청`
63+
- 설명: 한글/영문, 언더스코어로 단어 구분
64+
- 특수문자 제거 및 안전한 파일명으로 변환
65+
- 예시: `#20260214_001_버그_채팅방_중복생성_오류.md`, `#20260214_002_기능추가_물품삭제_확인_다이얼로그.md`
66+
67+
3. **파일 내용**
68+
- 첫 줄: 제목 그대로 (마크다운 `#` 없이, GitHub 이슈 제목에 바로 복사-붙여넣기 가능)
69+
- 빈 줄
70+
- 나머지: 본문 (GitHub 이슈 본문으로 복사용)
71+
72+
4. **파일 저장**
73+
- `.issue/` 폴더에 직접 저장
74+
- Git 추적 안 됨 (`.gitignore``/.issue` 등록)
75+
76+
### 출력
77+
78+
1. 저장된 파일 경로 표시
79+
2. 이슈 내용 요약 표시
80+
3. "GitHub에 이슈를 생성하려면 위 제목과 본문을 복사해서 붙여넣으세요" 안내
81+
82+
---
83+
84+
## 제목 형식
85+
86+
기존 이슈 패턴을 준수합니다:
87+
88+
```
89+
❗[버그][카테고리] 설명
90+
⚙️[기능추가][카테고리] 설명
91+
🚀[기능개선][카테고리] 설명
92+
🔧[기능요청][카테고리] 설명
93+
🎨[디자인][카테고리] 설명
94+
🔍[시험요청][카테고리] 설명
95+
```
96+
97+
- `[카테고리]`는 관련 영역을 넣음 (예: `[로그인]`, `[Flutter]`, `[CICD]`, `[마법사]`, `[CustomCommand]` 등)
98+
- 카테고리는 여러 개 가능 (예: `[버그][Flutter][빌드]`)
99+
- 사용자가 "긴급"이라고 직접 말한 경우에만 `🔥[긴급]` 추가
100+
101+
---
102+
103+
## 템플릿별 출력 형식
104+
105+
### 버그 이슈 (bug_report)
106+
107+
```markdown
108+
## 제목
109+
[버그][카테고리] 설명
110+
111+
## 본문
112+
113+
🗒️ 설명
114+
---
115+
116+
- {사용자 입력 기반으로 버그 현상 설명}
117+
118+
🔄 재현 방법
119+
---
120+
121+
1. {재현 단계 1}
122+
2. {재현 단계 2}
123+
3. {결과 확인}
124+
125+
📸 참고 자료
126+
---
127+
128+
{사용자가 로그나 스크린샷을 제공한 경우 여기에 정리, 없으면 비워둠}
129+
130+
✅ 예상 동작
131+
---
132+
133+
- {정상적으로 동작해야 하는 모습}
134+
135+
⚙️ 환경 정보
136+
---
137+
138+
- **OS**:
139+
- **브라우저**:
140+
- **기기**:
141+
142+
🙋‍♂️ 담당자
143+
---
144+
145+
- **백엔드**: 이름
146+
- **프론트엔드**: 이름
147+
- **디자인**: 이름
148+
```
149+
150+
### 기능 요청/추가/개선 이슈 (feature_request)
151+
152+
```markdown
153+
## 제목
154+
⚙️/🚀/🔧[기능추가/개선/요청][카테고리] 설명
155+
156+
## 본문
157+
158+
📝 현재 문제점
159+
---
160+
161+
- {현재 어떤 부분이 부족하거나 필요한지}
162+
163+
🛠️ 해결 방안 / 제안 기능
164+
---
165+
166+
- {제안하는 기능이나 해결 방안}
167+
168+
🙋‍♂️ 담당자
169+
---
170+
171+
- 백엔드: 이름
172+
- 프론트엔드: 이름
173+
- 디자인: 이름
174+
```
175+
176+
**참고**: 기능추가/기능개선인 경우 필요하다 판단되면 `⚙️ 작업 내용` 섹션을 추가할 수 있음 (코드 내용이 아닌 작업 항목 수준으로):
177+
178+
```markdown
179+
⚙️ 작업 내용
180+
---
181+
182+
- {작업 항목 1}
183+
- {작업 항목 2}
184+
```
185+
186+
### 디자인 요청 이슈 (design_request)
187+
188+
```markdown
189+
## 제목
190+
🎨[디자인][카테고리] 설명
191+
192+
## 본문
193+
194+
🖌️ 요청 내용
195+
---
196+
197+
- {디자인 요청 내용}
198+
199+
🎯 기대 결과
200+
---
201+
202+
- {디자인 적용 후 예상 결과}
203+
204+
📋 참고 자료
205+
---
206+
207+
{참고 링크, 이미지 등}
208+
209+
💡 추가 요청 사항
210+
---
211+
212+
- {추가 고려 사항}
213+
214+
🙋‍♂️ 담당자
215+
---
216+
217+
- 백엔드: 이름
218+
- 프론트엔드: 이름
219+
- 디자인: 이름
220+
```
221+
222+
### QA/시험 이슈 (qa_request)
223+
224+
```markdown
225+
## 제목
226+
🔍[시험요청][카테고리] 설명
227+
228+
## 본문
229+
230+
🔗 ISSUE 정보
231+
---
232+
233+
- {관련 이슈 번호/링크}
234+
235+
🔗 PR 정보
236+
---
237+
238+
- {관련 PR 번호/링크}
239+
240+
🧩 시험 대상
241+
---
242+
243+
- {테스트할 기능/수정사항}
244+
245+
📋 테스트 시나리오
246+
---
247+
248+
1. {테스트 케이스 1}
249+
2. {테스트 케이스 2}
250+
3. {테스트 케이스 3}
251+
252+
⚙️ 테스트 환경
253+
---
254+
255+
- **프로젝트 Version**:
256+
- **OS**:
257+
- **브라우저**:
258+
- **기기**:
259+
260+
🙋‍♂️ 담당자
261+
---
262+
263+
- **시험담당**: 이름
264+
```
265+
266+
---
267+
268+
## 작성 원칙
269+
270+
1. **간결하게**: 불필요한 설명 없이 핵심만 작성
271+
2. **코드 없이**: 기능/현상 중심으로만 작성, 구현 방법이나 코드 언급 금지
272+
3. **템플릿 준수**: 위 템플릿 구조를 정확히 따름
273+
4. **적절한 추론**: 사용자가 대충 말해도 문맥에서 파악 가능한 건 알아서 채움
274+
5. **필요하면 질문**: 정말 모르겠는 것만 짧게 질문
275+
6. **담당자 기본값 유지**: 담당자는 항상 "이름"으로 유지
276+
7. **보강 가능**: 필요하다 판단되면 내용을 적절히 추가해도 됨
277+
278+
---
279+
280+
**목표**: "사용자가 대충 설명해도, 깔끔한 GitHub 이슈를 바로 만들 수 있게"

0 commit comments

Comments
 (0)