지금까지는 안 겹치는 변경까지 사람이 하나씩 눌러야 해서, 정작 판단이 필요한 서너 줄이 그 속에 묻혔다. git merge 가 자동으로 해 주는 일을 여기서도 해 준다. - 자동 병합: 저쪽만 고친 줄(ThreeWayState.RemoteChanged)을 한 번에 가져온다. 충돌과 내가 고친 줄은 건드리지 않는다. 이미 가져온 줄은 더 이상 RemoteChanged 가 아니므로 여러 번 눌러도 안전하다. - 충돌만 이동: Alt+Shift+↑↓. "다음 차이" 와 달리 아직 안 정한 충돌만 딛는다. - 완료 판정: ACTIONS 에 "남은 충돌 N개"(빨강) → "충돌 정리 끝"(초록). 판단이 하나 필요했다 - 충돌 여부는 BASE·MINE·REMOTE 를 견주면 저절로 나오지만, "내 것으로 간다"고 정한 줄은 내용이 그대로라 여전히 충돌로 보인다. 그래서 MergeLine.NeedsDecision(충돌이면서 반영·수정 표시가 없는 줄)을 따로 두었다. 그 결정은 글을 바꾸지 않아 편집 뒤 재정렬하면 사라지므로, 얼어 있는 BASE 줄 번호 (없으면 MINE 줄 번호)로 붙들어 되살린다. 곁들여 고친 것: Take Mine / Take Theirs 버튼이 줄을 옮겨도 켜짐·꺼짐이 그대로였다. CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘만 갱신 목록에서 빠져 있었다 - 키보드(Alt+←/→)로는 되고 버튼만 안 되던 이유다. 실행 확인(mergehub-demo, 3-Way = feature/cooling): 자동 병합으로 Theirs only 1→0, 다음 충돌+Take Theirs 를 반복해 남은 충돌 3→2→1→"충돌 정리 끝". 테스트 290 → 293건 전부 통과(단축키 3건 추가). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
85 lines
5.3 KiB
Markdown
85 lines
5.3 KiB
Markdown
# MergeHub 진행 상황
|
|
|
|
작업 하나가 끝날 때마다 이 표를 고치고 **로컬 커밋**한다.
|
|
푸시는 하지 않는다 — 사내 Gitea 저장소가 만들어지면 그때 한 번에 올린다.
|
|
|
|
상태 표기: `대기` · `진행` · `완료`
|
|
|
|
---
|
|
|
|
## 이번 주 목표 (2주차 · 폭 넓히기)
|
|
|
|
기획안(`문서/사내_MergeTool_개발기획안`) 기준으로 **기능 덩어리를 100% 로 채우는 것**이 목표다.
|
|
한 덩어리를 깊게 파는 것보다 여러 덩어리를 "있다"고 말할 수 있는 선까지 올린다.
|
|
|
|
### ④ Git 조작 — **완료** (2026-09-08)
|
|
|
|
서비스에는 이미 있는데 화면에 없던 것들이라, 다섯 가지가 하루가 아니라 반나절에 붙었다.
|
|
|
|
| 상태 | 항목 | 내용 | 확인 |
|
|
|---|---|---|---|
|
|
| **완료** | 커밋 이름 변경(amend) | `커밋 수정` 버튼. 고쳐 쓸 메시지를 다시 치지 않게 `마지막 메시지` 버튼도 함께 뒀다 | 확인: `6e6bb78` → `0d7401f` 로 메시지가 바뀜 |
|
|
| **완료** | stash 목록 | 콤보에서 골라 `적용`/`삭제`. 목록이 바뀌면 고른 항목을 다시 잡는다 - 하나 꺼내면 번호가 당겨지는데 옛 항목을 붙들고 있으면 <b>다음 삭제가 엉뚱한 것을 지운다</b> | 확인: 저장 → 목록에 뜸 → 적용 → 워킹트리 복구 |
|
|
| **완료** | 두 커밋 사이 비교 | 이력에서 `여기부터` 로 시작점을 잡으면 그 뒤 고르는 커밋이 끝점이 된다. 안 잡으면 지금까지처럼 부모와 비교 | 확인: 헤더가 `2766bc5 → 6e6bb78 (2개 파일)` |
|
|
| **완료** | blame (줄별 작성자) | `Blame` 탭 신설. 변경 목록에서 파일을 고르고 `blame` 을 누르면 경로가 넘어간다 | 확인: 31줄 전부 `커밋·날짜·작성자` 가 붙어 나옴 |
|
|
| **완료** | 변경분 파일 추출 | `GitService.ExportChangedFiles` 신설. 저장소 안 경로 구조를 그대로 만들고, <b>바이트 그대로</b> 옮긴다(텍스트로 다시 쓰면 줄바꿈·인코딩이 바뀐다). 지워진 파일은 뽑을 것이 없어 건너뛴다 | 확인: `2개 파일 → ...Temp (건너뜀 0개)` |
|
|
|
|
### ③ 3-Way 병합 — **완료** (2026-09-08)
|
|
|
|
"볼 수 있다"에서 "끝낼 수 있다"로.
|
|
|
|
| 상태 | 항목 | 내용 | 확인 |
|
|
|---|---|---|---|
|
|
| **완료** | 자동 병합 | 저쪽만 고친 줄(`ThreeWayState.RemoteChanged`)을 한 번에 가져온다. 충돌과 내가 고친 줄은 안 건드린다. `git merge` 가 자동으로 해 주는 일을 여기서도 해 주는 것 | `Theirs only 1 → 0`, 자동 병합 버튼이 스스로 꺼짐 |
|
|
| **완료** | 충돌만 이동 | `이전 충돌` / `다음 충돌` (`Alt+Shift+↑↓`). <b>아직 안 정한 충돌만</b> 딛는다 | 3개를 차례로 딛고 마지막에 버튼이 꺼짐 |
|
|
| **완료** | 병합 완료 판정 | ACTIONS 위쪽에 `남은 충돌 N개`(빨강) → `충돌 정리 끝`(초록) | 3개 → 2 → 1 → 끝 |
|
|
|
|
**여기서 판단이 하나 필요했다** — 충돌인지 아닌지는 BASE·MINE·REMOTE 를 견주면 저절로 나오지만,
|
|
"내 것으로 간다"고 정한 줄은 <b>내용이 그대로라 여전히 충돌로 보인다.</b> 그래서 `NeedsDecision`
|
|
(충돌이면서 아직 반영·수정 표시가 없는 줄)을 따로 두었다. 그 결정은 글을 바꾸지 않으므로 편집 뒤
|
|
다시 정렬하면 사라지는데, 얼어 있는 <b>BASE 줄 번호</b>(없으면 MINE 줄 번호)로 붙들어 되살린다.
|
|
|
|
**곁들여 고친 것**: `Take Mine` · `Take Theirs` 버튼이 <b>줄을 옮겨도 켜짐/꺼짐이 그대로였다.</b>
|
|
CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘만 갱신 목록에서 빠져 있었다.
|
|
키보드(`Alt+←/→`)로는 되고 버튼만 안 되던 이유가 이것이다.
|
|
|
|
### ① 폴더 비교
|
|
|
|
| 상태 | 항목 | 내용 |
|
|
|---|---|---|
|
|
| 대기 | 폴더째 복사·삭제 | 지금은 파일 하나씩만 된다(`CanCopyToRight` 가 파일만 허용) |
|
|
| 대기 | 상태별 보기 필터 | 왼쪽만 / 오른쪽만 / 다른 것만 |
|
|
| 대기 | 비교 취소 | 큰 폴더를 잘못 고르면 기다리는 수밖에 없다 |
|
|
|
|
### ② 파일 비교
|
|
|
|
| 상태 | 항목 | 내용 |
|
|
|---|---|---|
|
|
| 대기 | 바꾸기 (Ctrl+H) | 찾기만 있다 |
|
|
| 대기 | 덩어리 단위 반영 | 줄 단위 아니면 전체뿐. 연속 5줄이면 5번 누른다 |
|
|
| 대기 | 인코딩·줄바꿈 변환 저장 | CP949 ↔ UTF-8. 지금은 읽어서 보여주기만 |
|
|
| 대기 | 바이너리·이미지 비교 | 감지해서 안내만 하고 끝난다 |
|
|
|
|
---
|
|
|
|
## 3~4주차로 미룬 것
|
|
|
|
디테일이라 지금 붙잡을 일이 아니다.
|
|
|
|
- 파일·폴더 드래그&드롭, 최근 파일 목록
|
|
- 로그인·권한
|
|
- 탐색기 우클릭 등록, `git mergetool` 인자 수신
|
|
(※ `git config` 에 등록하는 쪽은 이미 있는데 **받는 쪽이 없다** — 다리를 반만 놓은 상태다)
|
|
- 비교 결과 보고서 내보내기
|
|
- 대용량 파일 성능 (수만 줄) — 실제 소스 크기를 확인한 뒤 판단
|
|
|
|
---
|
|
|
|
## 완료 기록
|
|
|
|
| 날짜 | 항목 | 커밋 |
|
|
|---|---|---|
|
|
| 2026-09-08 | 저장소 개설 (MergeHub · UbisamPlatform 각각) | `7719094` / `36ee902` |
|
|
| 2026-09-08 | **④ Git 조작 5가지** — amend · stash 목록 · 커밋 간 비교 · blame · 변경분 추출 | `9956567` |
|
|
| 2026-09-08 | **③ 3-Way** — 자동 병합 · 충돌만 이동 · 병합 완료 판정 | 아래 |
|