Ubisam-MergeTool/doc/진행상황.md
ksj09406 c814c3f1b6 11차 E-1: 바꾼 길을 다시 끝까지 — 새로 걸린 것 없음
A-1 아홉 경우 · C-1 여덟 경우 · C-2 로 이력을 다시 쓴 저장소에서 병합 한 길 · 다섯 길 + pull 을 배포한 플랫폼 위에서 사람 순서로 다시 했다. 누른 수 = 로그, 줄끝 · BOM · 충돌 표식 · class 0, 두 탭 같은 커밋. 시험 도구가 창 최대화를 풀던 것을 고침(제품 아님). 제품 코드 변경 없음.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 12:27:48 +09:00

409 lines
33 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MergeHub 진행 상황
**지금 무엇이 남았는지만** 적는다. 끝난 것의 상세는 [history/](history/) 로 옮겼다.
항목을 끝내면 이렇게 한다.
1. 상세는 `history/YYYY-MM-DD-주제.md` 에 적는다.
2. 이 파일은 **대기 → 완료로 상태만** 고친다.
3. [history/changelog.md](history/changelog.md) 에 한 줄을 더한다 (날짜 · 무엇을 왜 · 커밋).
푸시는 하지 않는다 — 사내 Gitea 저장소가 만들어지면 그때 한 번에 올린다.
상태 표기: `대기` · `진행` · `완료`
---
## 4차 — 로컬 머지툴 사용성 (2026-09-10) — **전부 끝**
진행 기록: [history/2026-09-10-4차.md](history/2026-09-10-4차.md)
지시서: [작업지시/4차.md](작업지시/4차.md). 기능을 늘리는 것이 아니라 매일 쓰는 사람의 걸림돌을 없애는 것이 목적이다.
### A. 작업한 것이 사라지는 문제
| 상태 | 항목 |
|---|---|
| **완료** | A-1 저장하지 않은 편집이 말없이 사라진다 |
| **완료** | A-2 내보낸 보고서에 만든 사람이 없다 |
### B. 매일 쓰는 마찰 줄이기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 최근 비교 목록 |
| ~~취소~~ | ~~B-2 같은 줄 접기~~ (2026-09-10 사용자 판단으로 뺌) |
| **완료** | B-3 폴더 비교에서 다음 다른 파일로 |
| ~~취소~~ | ~~B-4 외부 편집기로 열기~~ (2026-09-10 사용자 판단으로 뺌) |
### C. 화면 구성 정리
| 상태 | 항목 |
|---|---|
| **완료** | C-1 같은 경로가 세 군데 나온다 |
| **완료** | C-2 아래쪽 정보가 세 군데로 흩어져 있다 |
| **완료** | C-3 Git 탭의 원격 블록을 접는다 |
| **완료** | C-4 색 구분 범례를 이동 도구로 |
| **완료** | C-5 ACTIONS 칸을 자주 쓰는 것과 한 번 정하는 것으로 나눈다 |
### D. 변경 이력을 전용 폴더로
| 상태 | 항목 |
|---|---|
| **완료** | D-1 `doc/history/` 를 만들고 진행상황을 나눈다 |
| **완료** | D-2 앞으로의 기록 규칙을 정한다 |
---
## 5차 — 실제 소스에 맞추기 (2026-09-10 ~)
진행 기록: [history/2026-09-11-5차.md](history/2026-09-11-5차.md)
지시서: [작업지시/5차.md](작업지시/5차.md). 지금까지는 시험용 파일로만 확인했다.
5차는 실제 소스(2,115개 · 426,723줄)를 한 번 재 보고 나온 것들이다.
2026-09-11 부터는 실제 소스를 더 보지 않는다 - 여기는 머지툴을 만드는 자리이고,
시험 재료는 우리가 만들어 쓴다. 이미 받아 둔 숫자는 그대로 쓴다.
### A. 남의 소스를 망가뜨릴 수 있는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 CP949 파일 67개를 잘못 읽으면 한글이 깨진다 |
| **완료** | A-2 커밋·체크아웃 뒤에 저장 안 한 편집이 조용히 사라진다 |
### B. 실제 소스에 맞추기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 XAML 색칠이 사실상 없다 (400개 · 42,477줄) |
| **완료** | B-2 폴더 비교가 오래 걸린다 — 전체 비교 3.4배 · 빠른 비교 4.7배 |
### C. 실전 투입
| 상태 | 항목 |
|---|---|
| **완료** | C-1 병합을 한 번 끝까지 해 본다 — 커밋까지 갔다. 걸린 것 23가지(심각 5)가 6차 재료 |
---
## 6차 — 병합을 끝까지 믿고 쓸 수 있게 (2026-09-14 ~)
진행 기록: [history/2026-09-14-6차.md](history/2026-09-14-6차.md)
지시서: [작업지시/6차.md](작업지시/6차.md). 5차 C-1 에서 만든 저장소로 병합을 끝까지 해 보고 걸린 23가지다.
확인은 같은 저장소(`C1Repo`)로 한다. 실제 소스는 열지 않는다.
### A. 파일이나 이력을 망가뜨리는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 3분할로 푼 파일을 저장하면 CRLF 가 LF 로 바뀐다 — 내 쪽(ours) 파일의 줄끝·인코딩을 따른다 |
| **완료** | A-2 Save & Commit 이 "실패" 라는데 파일은 이미 써지고 스테이징됐다 — [해결로 저장] 을 따로 둠 |
| **완료** | A-3 충돌 파일을 고르면 상대(Theirs) 칸이 안 나온다 — 콤보를 안 건드려도 네 칸, REMOTE 제목에 상대 브랜치 |
| **완료** | A-4 상대가 지운 파일을 3분할이 다룰 줄 모른다 — 남은 파일을 두 칸으로, [파일 남기기] · [파일 지우기] 띠 |
| **완료** | A-5 양쪽 새 파일에 Accept Both 를 누르면 빌드가 깨진다 — 누르기 전에 묻고, 글로 이어 붙여 BOM 한 번 · 줄끝 한 가지 |
### B. 헷갈리거나 막히는 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 충돌 목록에서 3분할 화면까지 가는 길이 끊겨 있다 — 병합 뒤 목록이 바로 서고, 두 번 누르기·Enter·[3분할로 열기] |
| **완료** | B-2 확인 창이 엉뚱한 파일 이름을 댄다 — 이름·[저장하고 계속] 모두 실린 파일 기준, [취소] 뒤 콤보도 돌아온다 |
| **완료** | B-3 커밋 메시지가 엉뚱하게 남는다 — 기본값 `Merge branch '상대' into 내 브랜치`, `#` 줄 뺌, 병합이 끝나면 칸을 비움 |
| **완료** | B-4 MERGED 칸 줄 번호가 네 자리에서 잘린다 — 네 칸 여백을 66px 로, MERGED 번호 자리 20 → 36px(다섯 자리) |
| **완료** | B-4 확인 중 발견 두 건 — 멀리 건너뛰면 네 칸이 위로 밀려 아래가 빔 · `git mergetool` 세 벌이 두 칸으로 열림 |
| **완료** | B-5 머지 주석은 소스에 넣고, 병합 뒤에는 그 줄을 무시한다 — 비교(두 칸 · 네 칸 · 폴더)에서 가리고, 주석만 다른 git 충돌은 양쪽 주석을 남겨 자동으로 푼다. 설정에서 끔 |
| **완료** | B-6 충돌 탭에서 하나씩 누를 때마다 오래 기다린다 — 여러 개 골라 Accept 한 번, 다시 읽기는 끝에 한 번. 15개 22.0초 → 1.2초 |
| **완료** | B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다 — 인코딩 · 줄바꿈을 내 쪽(ours) 파일로, 요약에 "남은 충돌 N개 · 받을 변경 M줄" |
| **완료** | B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다 — 다시 나지 않음(두 흐름 확인, B-1 · A-3 에서 없어짐). 코드 변경 없음 |
### E. 추가 요청 (2026-09-14)
| 상태 | 항목 |
|---|---|
| **완료** | E-1 C# 코드 스타일 맞춤 (AURORA · Allman) — 비교 전에 중괄호 줄바꿈을 맞춤. 두 칸 · 네 칸 · 폴더 비교, 설정. 스타일만 다른 파일 남은 차이 39줄 → 1줄 |
| **완료** | E-2 발표 시연 재료 `demo\` — `make-demo.ps1` 한 번으로 폴더 비교 · 스타일 · mergetool · 큰 파일 · 병합 저장소 |
| **완료** | E-3 웹 문서 — 사용자 매뉴얼 · 발표 자료 · 남은 일 · 개발 현황 · 기획안 최신화 · 시연 대본 · WinMerge 비교 |
### C. 사소한 것
| 상태 | 항목 |
|---|---|
| **완료** | C-1 로그와 목록 다듬기 — 결과 로그 한 번, 목록에 충돌 종류 네 가지, "남은 충돌 N개 · 푼 것 M개 (M/전체)". CP949 로그 이름은 이미 고쳐져 있었음 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 병합을 처음부터 다시 끝까지 해 본다 — 충돌 26(자동 2)을 MergeHub 만으로 풀어 병합 커밋. 줄끝 · BOM 이 바뀐 파일 0/33, A 다섯 가지 다시 안 남. 23가지 중 사라짐 18 · 정해서 남음 1(머지 주석) |
**6차 전부 끝.** D-1 에서 새로 걸린 세 가지는 7차 재료다(고치지 않음).
- N1 3분할에서 고른 줄 로그가 "N행 (3-Way 안 씀) 반영"
- N2 마지막 [Save](옛 이름 해결로 저장) 뒤 병합 중인데 두 칸 · "남은 차이 3줄" 로 떨어짐
- N3 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 가 남음
---
## 7차 — 병합 화면이 사실대로 말하게 · 병합 말고 다른 충돌 길 (2026-09-14 ~)
진행 기록: [history/2026-09-14-7차.md](history/2026-09-14-7차.md)
지시서: [작업지시/7차.md](작업지시/7차.md). 6차 D-1 에서 새로 걸린 세 가지와, 6차에서 뺀 pull · rebase · cherry-pick 충돌.
### A. 병합 화면이 사실과 다르게 말하는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 마지막 충돌을 저장하면 "남은 차이" 가 뜬다 — 병합 중 충돌 0 이면 "충돌 정리 끝 · 병합 커밋을 할 수 있습니다 · 내 쪽 대비 받은 변경 N줄", 제목에 "병합 전 내 쪽" |
| **완료** | A-2 3분할에서 줄을 골라도 로그는 "3-Way 안 씀" 이라고 한다 — 로그 "10행 Theirs(feature/theirs) 반영" · "Mine(feature/mine) 으로 정함", 충돌 네 칸 머리는 콤보 대신 "병합 충돌 · REMOTE = 상대" |
### B. 치우기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 병합 커밋 뒤에도 `.git/MERGEHUB_CONFLICTS` 가 남는다 — 병합 커밋 · 작업 취소 직후와 새로고침마다 쓸모없어진 목록을 지움(터미널에서 끝낸 병합 포함). 병합 중에는 그대로 |
### C. 병합 말고 다른 충돌 길
| 상태 | 항목 |
|---|---|
| **완료** | C-1 pull 이 낸 충돌에는 머지 주석 자동 풀기가 안 걸린다 — pull 도 [Merge] 와 같은 뒷일(주석 자동 풀기 · 알림 · 진행 줄), 커밋 메시지 "Merge remote-tracking branch 'origin/…' into …" |
| **완료** | C-2 rebase · cherry-pick 충돌을 네 칸으로 끝까지 — 작업별 칸 제목(올릴 자리 · 다시 올리는 내 커밋 · 가져오는 커밋) · 진행 표시 · 끝내기 단추(병합 커밋 · 계속 · 커밋) · 원래 메시지, 이력 [모든 브랜치]. 두 길 모두 줄끝 바뀐 파일 0 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 네 길(병합 · pull · rebase · cherry-pick)을 처음부터 다시 끝까지 — 모두 MergeHub 만으로 커밋(rebase 끝)까지, 줄끝 · BOM 바뀐 파일 0. A-2 · B-1 다시 안 남, A-1 은 rebase · cherry-pick 에서 다시 남. MERGED 줄 번호 안 잘림. 새로 걸린 넷(N1 **고른 파일 대신 다른 파일 내용이 저장됨** · N2 · N3 · N4)은 8차 재료(고치지 않음) |
### E. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | E-1 [해결로 저장] 이름을 [Save] 로 — 하는 일은 그대로, 알림 · 안내 · 웹 문서 이름도 |
| **완료** | E-2 폴더 비교 탭에 폴더를 하나씩 끌어다 놓으면 첫 칸 → 둘째 칸 차례로 (경로 칸 위가 아니어도) — 양쪽이 차면 바로 비교, 칸 위에 놓은 것도 차례에 침 |
| **완료** | E-3 사용자 이름을 저장하기 전에는 화면을 쓸 수 없게 — 이름 창이 끌어도 안 움직이고 저장 없이 닫히지 않음(플랫폼, 배포함) |
| **완료** | E-4 창 크기를 마음대로 조절할 수 있게 — 끌어 크기 조절(최소 1280×720) · 두 번 누르기 최대화 ↔ 복원 · 화면 이동이 크기를 지킴 · 크기 · 모니터 기억. 최대화는 작업 표시줄까지 덮고(사용자 결정) 크기를 바꿀 때 깜빡이지 않음(검은 칠 99.7% → 3%). 플랫폼, 배포함. MergeHub 네 탭 최소 크기에서 안 잘림 |
**7차 전부 끝.** D-1 에서 새로 걸린 넷은 8차 재료다(고치지 않음). 웹 문서 갱신도 8차로 넘겼다.
- N1 파일 비교 탭을 처음 여는 것이 [3분할로 열기] 면 첫 충돌 파일이 보이고, 그 화면을 [Save] 하면 **고른 파일에 그 내용이 써짐**
- N2 rebase · cherry-pick 마지막 [Save] 뒤 "남은 차이 3줄"(A-1 은 병합만)
- N3 MERGED 칸 번호가 결과 파일 번호가 아님(3363 · 상태바 3366)
- N4 바뀌는 것 없는 cherry-pick 에서 [커밋] 이 켜지고 누르면 실패
---
## 8차 — 고른 파일에 고른 내용을 · 작업마다 화면이 사실대로 (2026-09-15 ~)
진행 기록: [history/2026-09-16-8차.md](history/2026-09-16-8차.md)
지시서: [작업지시/8차.md](작업지시/8차.md). 7차 D-1 에서 새로 걸린 넷과 7차에서 남긴 것(revert · 원래 작성자 · 창 크기의 안 본 곳) · 웹 문서.
### A. 사용자의 파일을 망가뜨리는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 고른 충돌 파일 대신 다른 파일이 보이고, 그 화면을 저장하면 고른 파일에 써진다 — 늦게 끝난 읽기를 버리고 다시 읽음, 화면에 실린 파일과 저장할 파일이 다르면 쓰지 않음. 네 길 모두 고른 파일이 열리고 저장이 그 파일에만 감 |
### B. 작업마다 화면이 사실대로 말하게
| 상태 | 항목 |
|---|---|
| **완료** | B-1 rebase · cherry-pick 에서 마지막 저장 뒤 "남은 차이" 가 뜬다 — 요약 · BASE 제목이 작업(병합 · rebase · cherry-pick · revert)을 따른다. rebase 는 "충돌 정리 끝 · [계속] 으로 rebase 를 이어 갑니다 · 올릴 자리 대비 올린 변경 N줄" · 제목 "올릴 자리". 병합 글은 그대로 |
| **완료** | B-2 바뀌는 것 없는 cherry-pick 에서 [커밋] 이 켜지고 누르면 실패한다 — 커밋할 것이 없으면 [커밋] 이 꺼지고 진행 줄 · 로그가 "가져올 변경이 없습니다 - [작업 취소] 로 끝냅니다". 병합 커밋은 그대로(트리가 같아도 정상). `--allow-empty` 는 사용자와 정한 뒤 |
| **완료** | B-3 MERGED 칸 줄 번호가 결과 파일 번호가 아니다 — 사용자가 "결과 파일 번호로" 를 고름(2026-09-16). 결과에 들어가는 줄만 1부터 다시 매긴다. 끝 번호 3363 → 3369 로 상태바 · [이동] 칸 · 저장된 파일(3369줄)과 같아짐 |
### C. 7차에서 남긴 것
| 상태 | 항목 |
|---|---|
| **완료** | C-1 revert 충돌을 화면으로 끝까지 — 생성기에 `feature/revert` 갈래를 더해 충돌 16개를 만들고, MergeHub 만으로 [Revert] → 네 칸("되돌리는 커밋 …") → [커밋] 까지. 원래 메시지 `Revert "내 쪽 작업"`, 줄끝 · BOM 바뀐 파일 0, 제품 코드 변경 없음 |
| **완료** | C-2 cherry-pick 이 원래 작성자를 남기는지 눈으로 — 생성기에서 상대 쪽 커밋만 작성자를 박지훈으로 두고 확인. MergeHub cherry-pick 은 작성자 박지훈 · 커밋한 사람 시험, revert 는 둘 다 시험 — git 과 같음. 제품 코드 변경 없음 |
| **완료** | C-3 창 크기 조절에서 안 본 것 — 실제 픽셀로 재고 사용자와 정함. 첫 Win+↓ 를 두 번 누르기 복원과 같게(작업 영역 80% · 가운데, 화면 밖 16px 없어짐), 덮는 창을 창 가운데로(최대화에서 36px 어긋남 → 0). 스냅은 최소 크기 때문에 반쪽이 안 됨(적어 둠), 1px 테두리는 그대로. 플랫폼, 배포함 |
### D. 문서
| 상태 | 항목 |
|---|---|
| **완료** | D-1 웹 문서를 7차 · 8차에 맞게 — 매뉴얼(창 크기 · 폴더 끌어놓기 차례 · 작업별 네 칸 제목 · MERGED 번호 · 다른 충돌 길) · "알아 둘 한계" 다시 씀 · 남은 일 표 · 숫자(22벌 1,073건 · 커밋 94). 아티팩트 버전 7 로 발행 |
### E. 확인
| 상태 | 항목 |
|---|---|
| **완료** | E-1 다섯 길(병합 · pull · rebase · cherry-pick · revert)을 사람 순서 그대로 다시 끝까지 — 파일 비교 탭을 미리 열지 않고 모두 MergeHub 만으로 커밋(rebase 끝)까지. 줄끝 · BOM 바뀐 파일 0 · 충돌 표식 0 · class 이름 검사 0. 7차 A-1 · A-2 · B-1 · 8차 A-1 · B-1 · B-2 다시 안 남, F-1 본문 26개. 새로 걸린 것 N1(cherry-pick 요약의 "내 쪽 대비" 가 틀린 기준)은 9차 재료(고치지 않음) |
### F. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | F-1 병합 커밋 메시지 본문에 충돌 해결 내역을 자동으로 적기 (2026-09-17 사용자 요청) — 병합 · pull 중 푼 방법(줄 단위 · Accept Mine/Theirs/Both · 남기기 · 지우기 · 머지 주석 자동)을 `.git` 에 적고 [병합 커밋] 본문에 "충돌 해결 N개 · 이름" + 파일 목록. 메시지 칸에 미리 보임, 커밋 · 취소 때 기록 치움. 스타일 맞춤 선택지는 만들지 않기로 |
**8차 전부 끝.** E-1 에서 새로 걸린 것은 9차 재료다(고치지 않음).
- N1 cherry-pick 마지막 [Save] 뒤 두 칸의 BASE 는 이력에서 고른 커밋인데 요약이 "내 쪽 대비 가져온 변경 N줄" 이라고 한다. 한 번은 다른 브랜치 커밋(`f310f49`)이 기준으로 잡혔다(다시 재니 안 남)
---
## 9차 — 두 칸이 무엇과 견주는지 사실대로 · 8차에서 남긴 것 (2026-09-17 ~)
진행 기록: [history/2026-09-17-9차.md](history/2026-09-17-9차.md)
지시서: [작업지시/9차.md](작업지시/9차.md). 8차 E-1 에서 새로 걸린 N1(cherry-pick 요약의 기준)과 그 곁가지 · 전에 남겨 둔 작은 것 둘 · 웹 문서.
### A. 두 칸이 무엇과 견주는지 사실대로
| 상태 | 항목 |
|---|---|
| **완료** | A-1 cherry-pick 마지막 저장 뒤 "내 쪽 대비" 라고 하지만 실제 기준은 이력에서 고른 커밋이다 — 사용자가 "HEAD 로 옮긴다" 를 고름(2026-09-17). 새로고침이 고른 커밋을 놓치면 목록 맨 위(모든 브랜치에서는 다른 브랜치 커밋)로 채우던 것을 해시로 되찾고 없으면 HEAD, 작업 중 충돌이 막 0 이 되면 HEAD 로. 요약은 기준이 HEAD 일 때만 작업 글. cherry-pick · revert 마지막 Save 뒤 제목 · 요약 · 기준이 같음(6줄 = git 대조) |
| **완료** | A-2 한 번은 기준이 다른 브랜치 커밋이었다 — 원인은 A-1 과 같음(선택을 놓치면 목록 맨 위로 채움). 해시만 지키자 cherry-pick [커밋] 뒤 옛 HEAD 에 남아 "남은 차이 6줄" 이 떠서, HEAD 를 보고 있었으면 새 HEAD 를 따라가게 함께 고침. 8차 E-1 순서 여섯 번 모두 시작 · 파일 단위 = 고른 커밋, Save 뒤 = HEAD, 커밋 뒤 = 새 HEAD |
### B. 전에 남겨 둔 작은 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 MERGED 칸에서 넣은 주석 줄이 다시 정렬하면 "무시" 색이 된다 — 사용자가 "처음부터 무시 색" 을 고름(2026-09-17). 넣는 순간 "추가"(파랑)였고 LOCAL(Mine) 칸에 주석 글이 보였는데, 다시 정렬했을 때와 같은 모양(무시 · Mine 빈 자리)으로 넣는다. Undo · Redo · 저장 내용 그대로, 규칙을 끄면 지금처럼 추가. 규칙을 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 가는 것은 적어 둠 |
| **완료** | B-2 폴더 비교 뒤 화면 트리를 세우는 데 1초 남짓 — 고치지 않음. 앱 안에서 단계를 나눠 재니 트리 만들기 5~17ms · 첫 화면까지 0.13초(필터 전체 0.24초)이고 기다림의 대부분은 비교(데운 뒤 0.7초). 5차의 "1초" 는 자동 조작 대기가 섞인 값. 그날 첫 비교는 9.2초(디스크 첫 읽기로 보임)를 적어 둠 |
### C. 문서
| 상태 | 항목 |
|---|---|
| **완료** | C-1 웹 문서를 8차 끝 · 9차에 맞게 — 개요 숫자(22벌 1,122건 · 커밋 104 · 8차 끝 · 9차 진행), 매뉴얼에 병합 커밋 본문 · 해결 기록이 남는 곳 · 마지막 저장 뒤 기준 HEAD · 알아 둘 한계 넷 더함, 남은 일에 8차 D-1 · F-1 · E-1 · 9차 표 · 정해서 두지 않는 것, 지금까지 만든 것 7~9차. 화면 문구 grep 대조 · 태그 짝 맞음. 아티팩트 버전 9 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 cherry-pick · revert 를 마지막 파일까지 네 칸으로 끝까지 (+ 병합 · rebase 회귀) — 네 길 모두 MergeHub 만으로 끝까지(cherry-pick · revert 는 [모든 브랜치] 켬). 마지막 Save 뒤 제목 · 요약 · 기준(HEAD)이 같고 요약 N줄 = git diff, 커밋 뒤 기준 새 HEAD. 줄끝 · BOM 바뀐 파일 0 · 충돌 표식 0 · class 이름 검사 0 · 병합 본문 26개 · 빈 cherry-pick [커밋] 꺼짐. 새로 걸린 것 N1(cherry-pick 첫 회차에서 고르기 한 번이 안 남아 멈춤, 다시 하니 끝까지)은 적어 둠 |
**9차 전부 끝.** D-1 에서 새로 걸린 것은 10차 재료다(고치지 않음).
- N1 cherry-pick 첫 회차에서 `Motion/Unit0.cs` 충돌 6개를 고른 뒤 "남은 충돌 1개" 로 남아 [Save] 가 꺼짐. 고르기 한 번이 로그에 안 남음(10줄 · 다른 길 18줄). 새 저장소로 다시 하니 끝까지 — 자동 조작 쪽으로 보이나 원인 미확인
---
## 10차 — 두 탭이 같은 커밋을 보게 · 남은 표시 어긋남 · 누름을 놓치는지 (2026-09-17 ~)
진행 기록: [history/2026-09-17-10차.md](history/2026-09-17-10차.md)
지시서: [작업지시/10차.md](작업지시/10차.md). 9차 D-1 에서 새로 걸린 N1 과 9차에서 적어 둔 셋(두 탭 고른 커밋 · 규칙 끈 채 반영 색 · 첫 폴더 비교 9.2초) · 다섯 길(+ pull) · 웹 문서.
### A. 한 번 누른 것이 남지 않는다
| 상태 | 항목 |
|---|---|
| **완료** | A-1 네 칸에서 충돌을 차례로 고르는데 한 번이 남지 않아 "남은 충돌 1개" 로 멈췄다 — 고치지 않음. 앱에 임시 로그를 넣고 61회(누름 366번, 9차 간격 31회 · 0.1초 30회, 병합 · cherry-pick) 되풀이 — 다시 안 남. 앱은 Take 를 모두 충돌 줄에서 받아 하나씩 줄임(헛돈 0). Take 뒤 [다음 충돌] 처리 전에는 Take 단추가 꺼져 있고, 9차 시험 도구가 "꺼져서 안 누름" 을 버린 것으로 보임 → 시험 도구가 다시 누르고 못 누르면 적게 고침 |
### B. 두 탭이 같은 커밋을 보게
| 상태 | 항목 |
|---|---|
| **완료** | B-1 Git 탭 이력에서 고른 커밋을 파일 비교 탭이 새로고침 전까지 따라오지 않는다 — 사용자가 "바로 따라간다 · 편집 있으면 고르는 순간 묻는다" 를 고름. 반대 방향(파일 비교 탭에서 고름)은 Git 탭 선택 표시가 남아 [Revert] 가 보이지 않는 커밋에 걸렸다. 양쪽이 고른 것을 알리고 다른 쪽이 따라감(파일 비교는 게이트가 빈 뒤 다시 세움, Git 탭 커밋 내용은 다시 보일 때). 목록이 선택을 바꾸기 전에 묻고 [취소] 면 누름을 막음. 마우스 · 방향키 · [취소] · [계속] · [Revert] 대상 확인 |
### C. 남은 표시 어긋남
| 상태 | 항목 |
|---|---|
| **완료** | C-1 "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 — 네 칸은 규칙과 상관없이 주석 줄과 코드 줄을 떼어 놓고, 다시 정렬한 주석 줄을 "반영함" 으로 칠하지 않음. 규칙 끔 넣은 직후 = 다시 정렬 뒤(반영함 6 · 추가 6), 요약 · 줄 수 · 저장 해시 그대로. 두 칸도 떼어 보니 차이 수가 4 → 5줄로 늘어 두 칸은 그대로 둠 |
### D. 처음 한 번이 느리다
| 상태 | 항목 |
|---|---|
| **완료** | D-1 그날 첫 큰 폴더 비교가 9.2초 — 고치지 않음. 파일마다 버퍼 없이 열어 캐시를 비운 뒤 재도(한 갈래 읽기 0.4 → 1.8초로 먹는 것 확인) 전체 비교 0.46~0.54초로 데운 상태(0.48초)와 같음 — 여러 갈래로 읽어서. 앱 새로 켠 첫 비교도 느리지 않음. 9.2초는 다시 안 남(디스크 정보 캐시 · 백신 짐작, 재부팅 · 보안 설정 없이 못 만듦). 매뉴얼 한계 문장을 잰 값으로. HDD 는 재 보지 않음 |
### E. 확인 · 문서
| 상태 | 항목 |
|---|---|
| **완료** | E-1 다섯 길(+ pull)을 다시 끝까지 — 고치지 않음. 병합 · pull · rebase · cherry-pick · revert 모두 첫 회차에 끝까지. 누른 Take = 줄 고른 로그(18 · 18 · 18 · 18 · 6), 마지막 Save 뒤 제목 · 요약 · 기준 = git, 줄끝 · BOM 바뀐 파일 · 충돌 표식 · class 이름 0. Git 탭에서 고른 커밋을 파일 비교 탭이 바로 따라옴(다섯 길). 8차 A-1 · B-1 · B-2 · F-1 · 9차 A-1 · A-2 · B-1 안 남. 새로 걸린 것 없음 |
| **완료** | E-2 웹 문서를 10차에 맞게 — 발행본(버전 10)이 9차 D-1 파일과 같음을 확인하고 고침. 개요 숫자(1,147건 · 커밋 114 · 10차 끝) · 매뉴얼 "두 탭은 같은 커밋을 본다" · 알아 둘 한계에서 고친 둘(B-1 · C-1) 뺌 · 남은 일에 10차 표와 남은 것(HDD) · 지금까지 만든 것 10차 · 기획안 v2 일정 · WinMerge 숫자. 화면 문구 grep 대조 · 태그 짝 맞음 · 아티팩트 버전 11 |
### F. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | F-1 · F-2 폴더 비교 "같은 것만" 에 내용이 다른 것처럼 보이는 줄이 섞인다 (2026-09-17 사용자) — 폴더 줄이 폴더 자신의 "다름"(주황)으로 보이던 것을 걸러 본 갈래의 개수("같음 122개")로. 설정(스타일 맞춤 · 머지 주석 무시)으로 같음이 된 파일은 사용자 결정대로 "같음(스타일만 다름)" · "같음(머지 주석만 다름)" 으로 따로 표시. 요약 수 그대로 |
| **완료** | F-3 "주석만 다름" 이름을 바꾼다 (2026-09-17 사용자) — BOM · 줄끝 · 인코딩 · 공백만 달라도 들어오던 상태를 "다름(코드는 같음)" 으로. 요약 "다름 N(코드는 같음 M)" · 범례 · 보고서 · 웹 문서. 판정 · 수 그대로 |
**10차 전부 끝.** E-1 에서 새로 걸린 것은 없다. 11차는 기획안 v1.2 에서 "일부" 로 남은 것(변경분 추출 · 커밋 메시지 수정)과 사내 베타 전 확인에서 나왔다.
- 같은 날 기획안 문서(잠금)도 v1.2 로 고쳐 올림 — 제품 코드 아님
---
## 11차 — 변경분 추출을 믿고 들고 가게 · 베타 전에 깨지는 것 · 커밋 메시지 수정 (2026-09-17 ~)
진행 기록: [history/2026-09-18-11차.md](history/2026-09-18-11차.md)
지시서: [작업지시/11차.md](작업지시/11차.md). 코드를 읽고 적은 짐작이라 항목마다 먼저 다시 내고 시작한다.
### A. 변경분 추출을 믿고 들고 가게
| 상태 | 항목 |
|---|---|
| **완료** | A-1 먼저 뽑아 보고 적는다 — 고치지 않음. 아홉 경우를 화면에서 뽑아 git 과 대조: 파일 고르기 · 바이트 보존(이진 · 한글 · 깊은 경로) · 범위 표시는 맞음. 확정된 문제 넷 — 지운 파일 · 이름 바뀐 옛 경로가 안 남음, 무엇과 무엇 사이인지 안 남음(병합은 첫 부모 · 거꾸로 범위도 말없이), 비어 있지 않은 폴더에 묻지 않고 덮어써 옛 파일이 섞임, 쓰다 막히면 반쯤 뽑힌 채 멈춤 |
| **완료** | A-2 뽑은 폴더 **옆**에 안내 파일(`…_변경분안내.txt`) — 사용자 결정대로 폴더 밖에 두고 지울 파일은 목록으로만. 범위(커밋 제목 · 날짜) · 뽑은 파일(추가 · 수정 · 이름 바뀜은 옛 이름) · 장비에서 지워야 할 파일(지워짐 · 옛 경로). 화면에서 뽑아 git 과 대조 · 하네스 ReportTest +14(45건) |
| **완료** | A-3 고른 폴더 아래 **새 폴더**(`변경분_4eb9ece..cbcad8a_2026-09-18`, 같은 이름이면 `_2`)를 만들어 뽑는다 · 뽑기 전에 쓸 수 있는지 **먼저 보고** 하나라도 막히면 아무것도 쓰지 않는다(사용자 결정). 화면에서 두 번 뽑아 기존 파일이 섞이지 않는 것 확인 · 하네스 ReportTest +12(57건) |
| 대기 | A-4 ZIP 으로 뽑기 — 할지 먼저 정함 |
### B. 사내 베타 전에 깨지는 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 배포 묶음 — 옛 Release(09-07)는 본 탭 3개 · 지금 형식 142개 중 74개가 없었다. Release 다시 빌드(경고 0 · 오류 0) · 참조를 따라가 **65개 97MB → 41개 43.5MB**(안 닿는 dll 7개 · 맥/리눅스/ARM 용 · pdb · 빈 Lang 뺌, 플랫폼 Core 가 참조하는 차트 몫은 사용자 결정대로 남김) · `scripts\make-bundle.ps1` 이 묶음과 `배포묶음.txt`(파일 · 크기 · 까닭) 를 만든다 · 빈 폴더(`%TEMP%\mergehub-beta`)에서 켜 네 탭 · 병합 한 길 끝까지(`647f1f8`, 줄끝 · BOM 바뀐 파일 0) · 매뉴얼 실행 위치 문장 고침 |
| **완료** | B-2 D 드라이브가 없는 PC · 설정 없는 첫 실행 — 첫 실행은 오류 없이 되고 기본값이 매뉴얼 표와 같다. D 를 못 쓰면 `UiSettingsService.cs:86` 에서 실패해 "계속 쓸 수 있습니다" 창 뒤 **창 없는 프로세스가 남는 것**을 같은 줄에서 재현. 플랫폼에서 고침(`377ffd3`, 사용자 결정): D 를 못 쓰면 `%LOCALAPPDATA%\UbisamConfig` · 켜는 중 실패는 "켜지 못했습니다" 뒤 끝냄. 세 경우 화면 확인 · 플랫폼 하네스 24건 · 사용자 확인 뒤 플랫폼 배포(바뀐 것 Core · Shell · README 셋) · 배포 묶음 다시 만듦 · 시험 흔적 지움 |
### C. 커밋 메시지 수정
| 상태 | 항목 |
|---|---|
| **완료** | C-1 있는 [커밋 수정] 바로잡기 — 여덟 가지를 화면에서 재현한 뒤 **1 · 3 · 4 · 7 고침**([마지막 메시지]가 HEAD 것 · 작성자와 작성 시각 보존 · 작업 중 단추 끔 · 알림에 "옛 → 새 해시 · 파일 N개 포함"), 이어서 **2 · 6 은 "먼저 묻기"**(사용자 결정) — 스테이징해 둔 파일이 있거나 이미 올린 커밋이면 확인 창을 띄우고 [아니오] 면 아무것도 안 바뀐다. 하네스 MergeSaveTest +22(232건). 8(여러 줄 메시지 못 침)만 범위 밖. 옛 항목: — [마지막 메시지] 가 목록 맨 위(다른 브랜치일 수 있음) · 스테이징 파일이 말없이 들어감 · 원래 작성자 · 시각이 바뀜 · 작업 중에도 켜짐 · 병합 커밋 · 올린 커밋 · 옛 해시 · `#` 줄 |
| **완료** | C-2 마지막 커밋이 아닌 커밋의 메시지 수정 (기획안 "커밋 우클릭 → 이름 변경") — 사용자 결정 **좁은 범위**. 이력 줄 우클릭 [메시지 바꾸기...] → 여러 줄 창 → 확인 창 → 고른 커밋 메시지만 갈고 그 뒤를 같은 트리 · 작성자 · 작성 시각으로 다시 씀(`RewriteHistory`), 되돌릴 자리 `refs/original/…`, 선택이 새 해시를 따라감. 올린 커밋 · 사이에 병합 · 다른 브랜치도 품음 · 태그 · 작업 중 · 커밋 안 한 변경 · 다른 브랜치에만 · 저장 안 한 편집 여덟 자리가 화면에서 막힘. 새 메시지 끝 줄바꿈을 git 처럼 다듬음(화면에서 찾음). 하네스 MergeSaveTest +40(272건) |
### D. 시험 도구 정리
| 상태 | 항목 |
|---|---|
| 대기 | D-1 줄끝 검사 스크립트의 부모 하나 커밋 오류 · 요약 읽는 함수의 "차이 없음" (10차 E-1 에서 남김) |
### E. 확인 · 문서
| 상태 | 항목 |
|---|---|
| **완료** | E-1 바꾼 길을 다시 끝까지 — A-1 아홉 경우(지운 파일 · 옛 이름 · 범위가 안내에, 두 번 뽑아도 새 폴더 둘, 막힌 파일 없이 끝) · C-1 여덟 경우(HEAD 메시지 · 작성자 보존 · 묻는 창 · 작업 중 꺼짐 · 병합 커밋 부모 둘) · C-2 로 다시 쓴 저장소에서 병합 · 다섯 길 + pull 모두 끝까지. 누른 수 = 로그, 줄끝 · BOM · 충돌 표식 · class 0, 두 탭 같은 커밋. **새로 걸린 것 없음**. 시험 도구가 창 최대화를 풀던 것을 고침 |
| 대기 | E-2 웹 문서 · 기획안(잠금, 사용자가 비밀번호로 잠금)을 11차에 맞게 |
### F. 추가 요청 (2026-09-18 사용자)
| 상태 | 항목 |
|---|---|
| 대기 | F-1 LOCAL · REMOTE · MERGED 이름 맞추고 칸마다 어느 파일인지 보이게 (지금은 경로가 맨 위 한 줄에만) · **덧**: 머지 주석에도 어디서 가져왔는지(REMOTE/BASE · 브랜치/해시) 남기고 그에 맞춰 무시 조건(`MergeNote` · `CompareRules` · `FolderComparer` · `NoteConflict` · `NoteRows`) 수정 — 옛 주석도 그대로 무시 |
| 대기 | F-2 메서드 단위로 골라 반영 · 머지 주석은 메서드 이름 위 한 줄 (지금은 줄 · 덩어리 · 전체) |
| 대기 | F-3 탐색기에서 폴더 두 개를 [보내기] 로 바로 비교 + 설치 파일 없이 되는지 확인 |
| 대기 | F-4 파일 비교 탭 툴박스(ACTIONS) 감추는 단추 (지금은 접어도 폭 그대로) |
| 대기 | F-5 글자 크기 조절 (지금은 Consolas 12 고정) |
| 대기 | F-6 글자를 되도록 많이 보이게 — 넓게 보기 한 단추, 늘어난 줄 수로 잼 |
| 대기 | F-7 어느 모니터에서든 제대로 뜨게 — 증상부터 적고 플랫폼 영향 확인 |
| 대기 | F-8 저장한 뒤에도 되돌리기 (지금은 저장 네 길이 스택을 비움) |
| 대기 | F-9 백업본으로 저장 · 원본을 건드릴지 고르게 |
| 대기 | F-10 덩어리가 어디로 갔는지 UI 로 잇기 (지금은 "자리 옮김" 색만) |
| 대기 | F-11 Git 계정 · URL · 암호 저장 확인 (지금은 주소 · 계정만 저장, 토큰은 메모리) |
| **완료** | F-12 C# 코드 스타일 맞춤 기본값을 AURORA 로 (2026-09-18 사용자 결정) — 설정 없는 첫 실행에서 AURORA, 중괄호만 다른 C# 짝 "차이 없음" · 같은 모양의 C++ 짝은 "남은 차이 4줄"(원본 그대로). 저장 동작은 그대로. 하네스 StyleTest +12(90건) |
---
## 3~4주차로 미룬 것
디테일이라 지금 붙잡을 일이 아니다.
- 로그인·권한
- ~~대용량 파일 성능~~ — 잴 필요가 없어졌다(2026-09-10). 실제 소스의 가장 큰 파일이 7,479줄이고 편집·이동·재정렬이 모두 빠르다
- 같은 줄 접기 (4차 B-2) — 차이 이동만으로 부족하다고 느끼는 순간이 오면 그때
- 외부 편집기로 열기 (4차 B-4) — 설정 값 두 개를 채우는 수고가 얻는 것보다 컸다
드래그&드롭(D-7)과 비교 결과 내보내기(D-6)는 3차에서 앞당겨 끝냈다.
---
## 지난 기록
| 날짜 | 문서 |
|---|---|
| 2026-09-10 | [4차 — 로컬 머지툴 사용성](history/2026-09-10-4차.md) — 열세 항목, 열하나 완료 · 둘 취소 |
| 2026-09-09 | [3차 — 버그 정리 + 기능 확장](history/2026-09-09-3차.md) — 스물세 항목, 전부 끝 |
| 2026-09-08 | [2주차 — 폭 넓히기](history/2026-09-08-2주차.md) — 기능 덩어리 ①~⑤ |
한 줄 요약은 [history/changelog.md](history/changelog.md) 에 있다.